As always, it depends.
Generally speaking, an algorithm implemented in C# should not perform worse than in C/C++ for arbitrarily large inputs. Using a "fast" language is not a substitute for a good algorithm. As a concrete example, QuickSort in C# will always beat InsertionSort in C/C++.
Rendering itself is a non-issue. If you're using hardware acceleration, rendering itself will happen on the GPU, which doesn't really care about what language the host program is written in. If you can manage to have the majority of processing get done in the GPU, there will be little difference in the language you use to write your engine.
However, there are things that managed languages such as C# are not very good at, some of which are very relevant in game making. Specifically, memory handling is much slower in C# than in C/C++, because every memory access is checked by the runtime. For example, copying an array element by element is much slower in C# than in C/C++.
But fear not, C# offers several tools you can use to optimize specific pinpointed areas of your code. You may want to look into
fixed and in general, usage of pointers in C#.
If all fails, you can always write your specific high performance routines in C/C++ and call them from C# using P/Invoke. I did this when making a game engine with scripting capabilities in Lua: I made interfaces for my engine functions and called them from the scripting engine written in C, which used LuaJIT, which is blazing fast.
You can also use P/Invoke to call native high performance functions like
CopyMemory() without having to write them yourself.
On the other hand, the development costs you can save yourself by writing a very complex program like a rendering engine, in C# may seriously outweigh the performance advantages you may get by writing it in C/C++.
So in my opinion, if you can write your program in C#, you should do so. Unlike other languages (-cough- Java -cough-), C# offers you lots of options to optimize pinpointed bottlenecks, while maintaining a good high-level abstraction for the rest of the engine.
On the other hand, you should use C/C++ in the following cases:
- You know C/C++ much better than C#, and it's impractical to learn C# just for this project.
- You are working on a platform in which C# is not supported.
- You are running on a severely memory/cpu constrained architecture.
- Extensive memory-jockeying is central to your program, in which case it's simply not worth it writing few parts in C#.