.NET is intended to hide the tedious details of the Win32 API. It succeeds at that in some respects, but fails in others. If most of what you write fits well with what MS tries to support, it can succeed quite well. If you depart into "virgin territory", you can lose the advantage entirely, and even cause a great deal of extra work compared to native code using Win32 directly.
The resulting software (essentially always) consumes more resources than native code. The only real question is how much more memory it uses, how much slower it runs, etc.
These, unfortunately, are hard to answer. Speed can be anywhere from essentially identical to 8x slower or so. Memory usage is consistently quite a bit higher (e.g., at least 2x, often 3-5x. One interesting point is that garbage collection gives a trade-off between speed and memory consumption (running the GC more often reduces memory usage at the expense of using more CPU time). As such, execution time will depend as much on memory availability as CPU speed.
Interestingly, one of the first things I personally did with .NET was porting a C++ program that I knew had a memory leak (I even knew were it was and roughly how to fix it, but actually doing so would have been a lot of work). Porting to .NET didn't take very long (it wasn't a lot of code). The good news was the the memory leak was gone. The bad news was that as closely as I could figure, the leaky C++ code would have had to run continuously for over a year to use as much memory as the .NET version required just to start up.