Check out this really cool sample at gotdotnet
It will profile an app as it runs and tell you how much memory it's allocating, when GC runs, how many objects are allocated, what types of objects are allocated.
I'm going to be really studying this stuff as I really want to understand what's going on under the hood with .NET ... it will make me a better programmer in the end I think.