That's more-or-less my take on it as well. It's not like using managed code makes magical sludge clog up your CPU or anything, it's just that managed code is, well, managed. There are some inherit limits that a managed environment is going to impose to keep things 'safe'. If your application is the kind that's going to require lots of 'hand-optimization' - in other words, low-level optimizations that the compiler isn't smart enough to make and that can't be expressed with conventional syntax - then unmanaged code definitely has an advantage over managed code. You've got assembly, multimedia instructions, function/jump pointers, and all sorts of other stuff at your fingertips that you can use to speed things up.
With managed code you're sort of at the mercy of the compiler. In many, if not most, cases, this isn't a problem. Compilers are actually pretty smart things most of the time and as you said, for GUIs and the like, .NET is a well-suited platform. Even if there's some real data processing going on, unless hand optimization is required, it can usually be written to run pretty close to the same speed as native code.
Emulators, and I'll admit, a wide array of other applications, do require these optimizations though, so I'm not trying to shove C# in everyone's face and tell them it's better than C++. I just think managed code gets a somewhat undeserved reputation as being slower than molasses (probably somewhat due to Java's earlier incarnations) when it really does have the potential to do many things just as well as native code - and often with less development and debugging time, given a competent programmer. Anyway, that's my opinion, and if you'd still rather avoid managed code like the plague, it's fine by me. :flowers: