I heard that generic collections are a significant performance advantage over stl - is that true?
I highly doubt it, the STL uses templates, which gets around JIT overhead and still creates true, compiled, statically typed collections.
Has native code written in C# (unsafe block, pin pointers, Marshal...) the same performance as the same code written natively in C++?
Although C# unsafe code performs very well, it doesn't tie into the rest of the runtime very well... For example, try to do socket code with unsafe buffers, and you just end up using fixed blocks everywhere, and it turns into a nightmare. Not only that, C++ code will still perform better.
Are there any cases in which C# is faster (has better performance) than C++ in practical use?
Dynamic code is the biggest one that comes to mind, System.Reflection.Emit and Linq expressions (especially with the new features in C# 4.0) really make code generation in C# practical, whereas similar strategies in C++ might take significantly more effort (and therefore not be practical).