The first time you run a dotNET app after system bootup, you take a huge penalty for getting the dotNET subsystem started. After this, iirc, it stays loaded.
Also, the first time you run a dotNET app, regardles of whether you have the dotNET runtime loaded, you get some JITing penalty.
After that, it's not all that bad, although dotNET binaries are heavier than native code.