Despite the runtime being the same for both C# and C++, there are performance-oriented tricks allowed in C++ language that have no equivalent C# (I mean
compile-time programming[
^], of course). Using some of these tricks, you could considerably improve efficiency of your program by shifting potentially runtime activity to compile time: the compiler will produce new code while expanding the templates that you provide.
Of course you can produce new code with C# as well, but you would need to emit your own CLR byte code to accomplish this. And if you resort to emitting your own byte code, the language in which you code it becomes very much irrelevant.
I did very lightweight side-by-side comparisons of managed and native 32-bit C++ programs some three years ago (I think it was a CPU-intensive contest-style programming problem, I don't remember the details). I was hoping to get some performance improvement by switching to native 32-bit mode, but I did not get any speed-up worth talking about: wall clock run time in both cases was roughly the same.