Strictly speaking, letting objects lying around unused isn't a memory leak, just sloppy programming. Like wossname has indicated, memory leaks are not possible in .Net - however that doesn't mean that the garbage collector acts in ways that make sense (well, common sense anyway ).

There are several utilities that you can use to profile .Net apps (out of the top of my head I would recommend CLR Profiler). Also, take a look at the performance monitor, there are a bunch of .Net counters that involve memory metrics.