[Edit 1]During the recent Blogs.MSDN.com upgrade, this post was lost.  I'm reposting it now, so the information can get back out there.

[Edit 2] I realized recently that there are a couple of key pieces of information missing from this post, so I expanded it a bit.

In my MIX and GDC talks, I recommend using the CLR Profiler to profile your Game Studio title, particularly for memory profiling.  The CLR Profiler for the V2 CLR doesn't, out of the box, support profiling of CLR4 applications (like GS4 games).  There is a relatively simple way to make the CLR Profiler v2 work with CLR4 applications, though. 

The first step is to tell the CLR to use the older version of the ICorProfiler interface.  This is accomplished through the use of an environment variable.  So open your system settings and add a global environment variable, named “COMPLUS_ProfAPI_ProfilerCompatabilitySetting”, and set the value to “EnableV2Profiler”.  Thanks to Dave Broman for this information: http://blogs.msdn.com/b/davbr/archive/2009/05/26/run-your-v2-profiler-binary-on-clr-v4.aspx.

There are two things you’ll need to remember when profiling an XNA application.  First, all XNA applications are 32 bit.  So you’ll need to run the x86 version of CLR Profiler, even if your system is 64 bit.

Second, you need to run CLRProfiler as an admin.  I always forget this, and then have to close everything and re-launch.  So I set clrprofiler.exe to always run as admin, in the advanced section of the executable’s properties.

If you have a version of VS2010 that includes the VSTS/F1 profiler, though, I recommend using the built-in profiler to profile your memory usage.  I've found that the reports from the VS profiler are more actionable; that profiler gives you a list of the code that produces the most allocations, and the code that allocated the most memory.  My team, ATG, recently did a performance review of a Windows Phone 7 title.  The VS profiler was invaluable for that performance review, and clearly showed the top allocators in the project, which made removing those allocators a lot easier.

The one feature that seems to be missing from the VS profiler is the ability to take a snapshot of the heap, at a moment in time.  CLR Profiler is still valuable, if for that feature alone.  That doesn’t really help with garbage,  but can help you learn more about where you are spending your memory budget.  Information like that is valuable on systems where memory may be tight (like Windows Phone 7, for instance).