title: What C# class objects acquire unmanaged resources? Is there a list?
body: <p>I was working on serializing and deserializing a class object using XML when I came across this blog post that shows how to do it on Windows Phone 7 using the isolated storage area.  Windows Phone 7 is the platform I am developing for:</p>
  
  <p>In <a href="http://blogs.msdn.com/b/dawate/archive/2010/08/31/windows-phone-7-xml-isolatedstorage-example.aspx" rel="nofollow">this example</a>, the only object he explicitly calls <strong>Dispose()</strong> on is the TextReader object.  I looked up the TextReader object on MSDN and found that <a href="http://msdn.microsoft.com/en-us/library/kxw7zx80.aspx" rel="nofollow">the documentation</a> said this:</p>
  
  <blockquote>
    <p>Releases the unmanaged resources used by the TextReader and optionally releases the managed resources.</p>
  </blockquote>
  
  <p>So I assume the reason he does this is to release immediately the unmanaged resources acquired by the TextReader object.  It would not have occurred to me to do this if it weren't for his blog post.  Obviously I don't want to start calling Dispose() on every object in sight, so what is a good rule of thumb for at least investigating when a particular object should have Dispose() called on it or not?  Are there some guidelines for this or a list somewhere, at least of the popular .NET objects that require this special handling?</p>