In C#, objects are always created with new. This alone can be a drawback in a certain perspective. For example, if you create an object inside a loop (meaning that a new object is created for each iteration in the loop) you can slow down your program.
for (int i = 0; i < 1000; ++i)
{
Object o = new Object();
//...
}
Instead create an instance outside the loop.
Object o = new Object();
Object o = new Object();
for (int i = 0; i < 1000; ++i)
{
//...
}
Only create an object in a loop if you really have to...
Perhaps doing a bit of C++ would help you understand the mechanics behind and know when and where to optimize your code. Although C++ is a different language there are a lot of things you can apply to other languages once you understand the basic of memory management (new, delete, pointers, dynamic arrays/static arrays, etc.).