Game developers may be skeptical at first that the CLR's managed environment can provide consistent, exceptional, real-time performance, but personal experience has shown me that for most situations it can. Working within .NET's managed environment provides numerous advantages and eliminates particular kinds of risks, but I won't lie to you: to tame the CLR, it helps to understand it. Deeply.
Back when I was convincing .NET that it wanted to suck down over 60 frames a second (to build a brain-computer interface and a pretty thing) I used to read Rico Mariani's .NET Performance Blog to understand the intimate details about how the CLR's garbage collector works and how to make the most of managed code for real-time applications. (Avoiding mid-life crisis, for example, may be essential if you want to prevent hiccups caused by garbage collection.)
Rico spoke recently at Microsoft Gamefest on how to write real-time managed code, and summarizes his Gamefest presentation in a great blog entry here. Of particular interest to me was the difference between the Compact CLR's garbage collector (which is what you'll develop against if using XNA on the Xbox 360) and the desktop CLR's equvalent.
p.s. I so wish I could have been to GameFest.