I never programmed any Kernel stuff, I'm a (or is it 'an'? 'an' would sound strange here but it'd be right...I guess) application developer and to me the difference between C# and C/C++ is that with C#, you got all tools you'll ever need to build your nice house (aka program). In C/C++ you got...two pebbles and a stick. Before you can actually build your nice house, you've to first build all your tools (for example: build a string class).
So...if you are really good with C/C++ you'll beat a C# program any time any day when it comes to things like performance. But you need more time to develop stuff and your code will be harder to understand/read/change for other people, because you only got those tools YOU needed and you used them the way YOU needed to.
Also you actually can build your own tools on a level that is completely alien to a C# developer. And you can do stuff that is not even possible in C#. (at least not without calling C libs)
Sometimes when I boot up Linux, look at it and ask myself how it is even possible that such a large amount of C code, cludged together by many different people, just...works. That's mostly the time when my XServer decides to forget my graphic card or some other weird thing happens.