<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Commentaires sur : Petit rappel sur le Disposing Pattern en C#</title>
	<atom:link href="http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/</link>
	<description>Par Romain Verdier</description>
	<lastBuildDate>Wed, 18 Apr 2012 13:58:53 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Par : Aldebert</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-253</link>
		<dc:creator><![CDATA[Aldebert]]></dc:creator>
		<pubDate>Thu, 09 Apr 2009 19:06:21 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-253</guid>
		<description><![CDATA[Une seule chose à dire, vivent les pointeurs et les programmeurs qui savent s&#039;en servir... ;)
héhéhéhé]]></description>
		<content:encoded><![CDATA[<p>Une seule chose à dire, vivent les pointeurs et les programmeurs qui savent s&#8217;en servir&#8230; ;)<br />
héhéhéhé</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Cyril Martin</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-251</link>
		<dc:creator><![CDATA[Cyril Martin]]></dc:creator>
		<pubDate>Tue, 07 Apr 2009 09:52:08 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-251</guid>
		<description><![CDATA[En voyant le titre, j&#039;ai pensé qu&#039;il s&#039;agissait d&#039;un autre sujet : où et comment libérer les ressources non-managées.

Le faire dans un finalize (donc quand le GC passe) n&#039;est pas toujours une bonne idée. Un exemple simple, imaginez un système qui manque de sockets mais pas de mémoire.

Évidemment, le 1er avril, la prod peut corriger efficacement ce problème en retirant une barrette mémoire :-)]]></description>
		<content:encoded><![CDATA[<p>En voyant le titre, j&#8217;ai pensé qu&#8217;il s&#8217;agissait d&#8217;un autre sujet : où et comment libérer les ressources non-managées.</p>
<p>Le faire dans un finalize (donc quand le GC passe) n&#8217;est pas toujours une bonne idée. Un exemple simple, imaginez un système qui manque de sockets mais pas de mémoire.</p>
<p>Évidemment, le 1er avril, la prod peut corriger efficacement ce problème en retirant une barrette mémoire :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-250</link>
		<dc:creator><![CDATA[Romain Verdier]]></dc:creator>
		<pubDate>Thu, 02 Apr 2009 08:24:36 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-250</guid>
		<description><![CDATA[Yann&gt; Tu aurais pu préciser que sur les systèmes 64 bits, ton implémentation du EMC (Exhaustive Memory Collect) devait itérer de 0 à long.MaxValue. Le truc qui est cool, c&#039;est que ça fonctionne aussi en 32bit.

Mac&gt; Puisque nous ne sommes plus le premier avril, je peux tenter une réponse sérieuse :

En C# : Il n&#039;y a pas de destructeur à proprement parler. On utilise la syntaxe C++ d&#039;un destructeur, mais le compilateur traduit ça en un appel au &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.object.finalize(VS.71).aspx&quot; rel=&quot;nofollow&quot;&gt;Finalizer&lt;/a&gt;. Dispose est juste une méthode comme les autres, sa seule spécificité est qu&#039;elle est reconnue par certaines constructions du langage, et types du framework. On est trop libre d&#039;en faire ce qu&#039;on veut, et d&#039;implémenter IDisposable n&#039;importe comment. 

En C++/CLI : Quand on ajoute un destructeur à sa classe, le compilateur rend le type IDisposable, et traduit le destructeur en Dispose. Pour implémenter un finalizer, il faut utiliser une nouvelle syntaxe ( !MaClasseManagée() )]]></description>
		<content:encoded><![CDATA[<p>Yann&gt; Tu aurais pu préciser que sur les systèmes 64 bits, ton implémentation du EMC (Exhaustive Memory Collect) devait itérer de 0 à long.MaxValue. Le truc qui est cool, c&#8217;est que ça fonctionne aussi en 32bit.</p>
<p>Mac&gt; Puisque nous ne sommes plus le premier avril, je peux tenter une réponse sérieuse :</p>
<p>En C# : Il n&#8217;y a pas de destructeur à proprement parler. On utilise la syntaxe C++ d&#8217;un destructeur, mais le compilateur traduit ça en un appel au <a href="http://msdn.microsoft.com/en-us/library/system.object.finalize(VS.71).aspx" rel="nofollow">Finalizer</a>. Dispose est juste une méthode comme les autres, sa seule spécificité est qu&#8217;elle est reconnue par certaines constructions du langage, et types du framework. On est trop libre d&#8217;en faire ce qu&#8217;on veut, et d&#8217;implémenter IDisposable n&#8217;importe comment. </p>
<p>En C++/CLI : Quand on ajoute un destructeur à sa classe, le compilateur rend le type IDisposable, et traduit le destructeur en Dispose. Pour implémenter un finalizer, il faut utiliser une nouvelle syntaxe ( !MaClasseManagée() )</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Jb Evain</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-249</link>
		<dc:creator><![CDATA[Jb Evain]]></dc:creator>
		<pubDate>Wed, 01 Apr 2009 11:30:51 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-249</guid>
		<description><![CDATA[Merci pour ce post. C&#039;est important de rappeler les fondamentaux.]]></description>
		<content:encoded><![CDATA[<p>Merci pour ce post. C&#8217;est important de rappeler les fondamentaux.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Mac</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-248</link>
		<dc:creator><![CDATA[Mac]]></dc:creator>
		<pubDate>Wed, 01 Apr 2009 11:30:18 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-248</guid>
		<description><![CDATA[Excellent billet. Je voulais juste signaler que pour les raisons évoquées ci-dessus, on préfère parler de Finaliseur pour la méthode ~MaClasseManagée(), et de Destructeur pour la méthode public void Dispose(). Ce qui en même temps rend le tout cohérent avec l&#039;implémentation de ce pattern en C++ managé (je crois).

J&#039;avais un très bon lien sur les discussions autour de ce pattern, que je mettrai ici. Mais uniquement si je le retrouve ;-)]]></description>
		<content:encoded><![CDATA[<p>Excellent billet. Je voulais juste signaler que pour les raisons évoquées ci-dessus, on préfère parler de Finaliseur pour la méthode ~MaClasseManagée(), et de Destructeur pour la méthode public void Dispose(). Ce qui en même temps rend le tout cohérent avec l&#8217;implémentation de ce pattern en C++ managé (je crois).</p>
<p>J&#8217;avais un très bon lien sur les discussions autour de ce pattern, que je mettrai ici. Mais uniquement si je le retrouve ;-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Yann Schwartz</title>
		<link>http://codingly.com/2009/04/01/petit-rappel-sur-le-disposing-pattern-en-c/#comment-247</link>
		<dc:creator><![CDATA[Yann Schwartz]]></dc:creator>
		<pubDate>Wed, 01 Apr 2009 10:53:13 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=641#comment-247</guid>
		<description><![CDATA[C&#039;est quand même plus simple d&#039;implémenter System.IUnknown et d&#039;appeler AddRef et Release au bon moment. Et puis pour vraiment sûr que la mémoire est libérée, il vaut mieux faire dans le Dispose :
[code language=&quot;csharp&quot;]
 if(!disposed)  
         {  
             // on appelle le garbage collector, et on force la libération de  
             // tous les objets pour être certains de plus référencer des variables  
             // non managées depuis C#  
            for(int i = 0; i &lt; Int32.MaxValue; i++)
            {
                GC.Collect(i);  //On demande à la GC de voir s&#039;il faut libérer chaque adresse du tas, on ne sait jamais
                GC.WaitForPendingFinalizers(); //Ne pas oublier les finaliseurs pendus.
            }
             disposed = Boolean.FileNotFound; // valeur ternaire de boolean, plus safe.
}
[/code]]]></description>
		<content:encoded><![CDATA[<p>C&#8217;est quand même plus simple d&#8217;implémenter System.IUnknown et d&#8217;appeler AddRef et Release au bon moment. Et puis pour vraiment sûr que la mémoire est libérée, il vaut mieux faire dans le Dispose :</p>
<pre class="brush: csharp;">
 if(!disposed)  
         {  
             // on appelle le garbage collector, et on force la libération de  
             // tous les objets pour être certains de plus référencer des variables  
             // non managées depuis C#  
            for(int i = 0; i &lt; Int32.MaxValue; i++)
            {
                GC.Collect(i);  //On demande à la GC de voir s'il faut libérer chaque adresse du tas, on ne sait jamais
                GC.WaitForPendingFinalizers(); //Ne pas oublier les finaliseurs pendus.
            }
             disposed = Boolean.FileNotFound; // valeur ternaire de boolean, plus safe.
}
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>

