<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: GDI+ Article Now Available</title>
	<atom:link href="http://leefalin.com/blog/2005/03/28/gdi-article-now-available/feed/" rel="self" type="application/rss+xml" />
	<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/</link>
	<description></description>
	<pubDate>Thu, 20 Nov 2008 10:52:10 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: M. Scott Ford</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-7</link>
		<dc:creator>M. Scott Ford</dc:creator>
		<pubDate>Wed, 11 May 2005 13:45:08 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-7</guid>
		<description>Very cool. I will have to grab a copy of that issue and read that article. Congrats.

On the garbage collection stuff, the IDisposable pattern is meant to combat the fact that clean up in the .NET Framework is non-deterministic. A class implements IDisposable in order to make the clean up of unmanaged resources deterministic. The reason the the Dispose method calls SupressFinalize is because the Finalize call is one of the most expensive operations in the runtime, and since it is only used to clean up unmanaged resources, there is no need to call it if the user has already called Dispose.

Just my two cents. :)</description>
		<content:encoded><![CDATA[<p>Very cool. I will have to grab a copy of that issue and read that article. Congrats.</p>
<p>On the garbage collection stuff, the IDisposable pattern is meant to combat the fact that clean up in the .NET Framework is non-deterministic. A class implements IDisposable in order to make the clean up of unmanaged resources deterministic. The reason the the Dispose method calls SupressFinalize is because the Finalize call is one of the most expensive operations in the runtime, and since it is only used to clean up unmanaged resources, there is no need to call it if the user has already called Dispose.</p>
<p>Just my two cents. <img src='http://leefalin.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jerry Knowlton</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-6</link>
		<dc:creator>Jerry Knowlton</dc:creator>
		<pubDate>Thu, 05 May 2005 15:16:02 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-6</guid>
		<description>Is this the very same Lee Falin that worked at CC!??</description>
		<content:encoded><![CDATA[<p>Is this the very same Lee Falin that worked at CC!??</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Al Hillman</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-5</link>
		<dc:creator>Al Hillman</dc:creator>
		<pubDate>Mon, 02 May 2005 20:49:07 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-5</guid>
		<description>Lee,

The article was very interesting.  However, when I tried to use it (since I am a student studying C#) I found that oTable was not defined and therefore I got an error.  I would appreciate the correction for this.

Thank you,

Al</description>
		<content:encoded><![CDATA[<p>Lee,</p>
<p>The article was very interesting.  However, when I tried to use it (since I am a student studying C#) I found that oTable was not defined and therefore I got an error.  I would appreciate the correction for this.</p>
<p>Thank you,</p>
<p>Al</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: leefalin</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-4</link>
		<dc:creator>leefalin</dc:creator>
		<pubDate>Fri, 01 Apr 2005 17:31:42 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-4</guid>
		<description>While the GC will eventually clean those up, eventually is the key word.

And GDI resources can be expensive, especially in a long running application.

See &lt;a href="http://blogs.msdn.com/ericgu/archive/2003/12/08/52964.aspx" rel="nofollow"&gt;this article by Eric Gunnerson&lt;/a&gt; (former C# program manger at MS) for more information.</description>
		<content:encoded><![CDATA[<p>While the GC will eventually clean those up, eventually is the key word.</p>
<p>And GDI resources can be expensive, especially in a long running application.</p>
<p>See <a href="http://blogs.msdn.com/ericgu/archive/2003/12/08/52964.aspx" rel="nofollow">this article by Eric Gunnerson</a> (former C# program manger at MS) for more information.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marc Bjorklund</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-3</link>
		<dc:creator>Marc Bjorklund</dc:creator>
		<pubDate>Wed, 30 Mar 2005 04:40:42 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-3</guid>
		<description>Using Reflector, we can see the code for Pen.Dispose() is

public void Dispose()
{
      this.Dispose(true);
      GC.SuppressFinalize(this);
}

It calls Dispose(true), which actually does the clean up, and then tells the garbage collector not to call the finalizer for this object since its resources have already been freed.

The finalizer for Pen is

~Pen()
{
      this.Dispose(false);
}

So if you create a Pen object and don't call Dispose(), the finalizer will call Dispose() for you when the object is garbage collected.</description>
		<content:encoded><![CDATA[<p>Using Reflector, we can see the code for Pen.Dispose() is</p>
<p>public void Dispose()<br />
{<br />
      this.Dispose(true);<br />
      GC.SuppressFinalize(this);<br />
}</p>
<p>It calls Dispose(true), which actually does the clean up, and then tells the garbage collector not to call the finalizer for this object since its resources have already been freed.</p>
<p>The finalizer for Pen is</p>
<p>~Pen()<br />
{<br />
      this.Dispose(false);<br />
}</p>
<p>So if you create a Pen object and don&#8217;t call Dispose(), the finalizer will call Dispose() for you when the object is garbage collected.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marc Bjorklund</title>
		<link>http://leefalin.com/blog/2005/03/28/gdi-article-now-available/#comment-2</link>
		<dc:creator>Marc Bjorklund</dc:creator>
		<pubDate>Wed, 30 Mar 2005 04:23:10 +0000</pubDate>
		<guid isPermaLink="false">http://leefalin.com/?p=6#comment-2</guid>
		<description>We once had a discussion concerning the necessity of calling Dispose().  You referenced a source that said it was required; however, that source, as I recall, was VB City. :)

My current understanding of Dispose() is that it provides a way for the user of the object to free unmanaged resources, but if the user does not explicitly call Dispose(), then the finalizer (destructor) will free the resources.

See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconImplementingDisposeMethod.asp

Congratulations on getting published!</description>
		<content:encoded><![CDATA[<p>We once had a discussion concerning the necessity of calling Dispose().  You referenced a source that said it was required; however, that source, as I recall, was VB City. <img src='http://leefalin.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
My current understanding of Dispose() is that it provides a way for the user of the object to free unmanaged resources, but if the user does not explicitly call Dispose(), then the finalizer (destructor) will free the resources.</p>
<p>See <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconImplementingDisposeMethod.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconImplementingDisposeMethod.asp</a></p>
<p>Congratulations on getting published!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.361 seconds -->
