maybe wrapper isn't the proper term to be using...windows programming is very much C-style, where there are tons and tons of global functions and global #defines, so they had to convert that into more "user-friendly" object-oriented classes.
i find C# more productive because it's easier to get started. in general there is much less required initialization code for anything you want to do. there are defaults already selected for you. but after all that is done, i really don't see a big difference in productivity between the 2 languages.
In other words, it's just a library where more thought and easiness of use has been put work into. They chose to put that work in C# rather than C++...
C# is just easier to learn than C++. It doesn't have many of the complex parts of C++, it has garbage collection, it is loaded with syntactic sugar.
This makes it the ideal target for their ease-of-use library, because the users of C++ (in their view) are the game companies, which wouldn't accept the abstraction penalty of such a library anyway, and thus wouldn't use it.
The performance difference is actually pretty small, a few percent at most, especially since CPU is becoming less and less of the performance bottleneck, and from the GPU's point of view, it's running the same HLSL either way. Generally, CPU is no longer the limiting factor to your game's performance, and thus CPU efficiency is less important.
Originally Posted by Elysia
And, if your game actually needs many of the advanced memory management features of C# -- such as being able to dynamically relocate objects in memory to avoid memory fragmentation, garbage collection, etc. -- the difference in performance becomes even smaller. And as there are games that take 1.5 GB+ of memory, and are designed for Win32 (with only 2 GB available virtual address space for each application), memory fragmentation rears its ugly head more and more.