The GC has 3 stages, one of which is for "short-lived" objects which most of the time get killed in Gen0. Gen0 stuff lives in the L2 processor cache. After being promoted from Gen0 to a higher Gen, it can live in the memory heap. So, any object you don't dispose of that has a finalizer is guaranteed to live past Gen0 if you don't call Dispose on it. DataSet inherits from MarshalByValueComponent which has a finalizer. For one single DataSet, who cares, right? OK, now think of all the crap that implements IDisposable either explicitly or implicitly that isn't getting disposed in the code you see. Probably makes a good point that calling Dispose on DataSets is worth while, or anything that implements IDisposable for that matter.