<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx</link><description>It always feels like issues come in clusters. One week we get tones of cache related cases, next week everyone is stuck in some lock and so on. Lately I have had a number of issues where there were memory leaks related to event handlers. Problem description</description><dc:language>sv-SE</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516183</link><pubDate>Mon, 23 Jan 2006 16:24:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516183</guid><dc:creator>snaveen</dc:creator><description>I know that the !dumpheap has a &amp;quot;–short &amp;quot; parameter that can be used within .foreach in the windbg. Is there any other command that can be used with in .foreach like !dumpheap?&lt;br&gt;&lt;br&gt;Example &lt;br&gt;&lt;br&gt;.foreach (obj { !dh -type System.String -gen 2 -short }) { !gcroot ${obj} }&lt;br&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516190</link><pubDate>Mon, 23 Jan 2006 17:01:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516190</guid><dc:creator>Tess</dc:creator><description>Many of the sos commands have a -short param. !dumpaspnetcache for example has a -short parameter. &lt;br&gt;&lt;br&gt;Even if they dont you can often use the .foreach command like above by skipping tokens with /pS and /ps.  I'm writing a blog post on automating debugging with .foreach now but your example above is excellent usage of the .foreach command. </description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516194</link><pubDate>Mon, 23 Jan 2006 17:19:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516194</guid><dc:creator>snaveen</dc:creator><description>Cool. How about some posts on debugging from managed code to unmanaged code? Like GCHandles, Pinning of memory, COM Callable Wrappers? I guess there aren’t many posts of this using windbg.&lt;br&gt;&lt;br&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516212</link><pubDate>Mon, 23 Jan 2006 18:16:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516212</guid><dc:creator>Tess</dc:creator><description>Sure thing, now on my todo list:) anything specific like memory issues or just how it works in general?</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516229</link><pubDate>Mon, 23 Jan 2006 18:45:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516229</guid><dc:creator>snaveen</dc:creator><description>I guess both.</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516294</link><pubDate>Mon, 23 Jan 2006 20:46:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516294</guid><dc:creator>Jason Haley</dc:creator><description>Excellent post!</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516622</link><pubDate>Tue, 24 Jan 2006 07:10:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516622</guid><dc:creator>Orand</dc:creator><description>I used the exact technique you described a few months ago to track down a WinForms memory leak due to subscribing to the static Application.Idle event.  They really need to clearly spell out in the documentation the consequences of not unsubscribing from a static event from the framework.  I'm sure this bites the majority of users who subscribe to this event.</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#516701</link><pubDate>Tue, 24 Jan 2006 11:47:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516701</guid><dc:creator>Tess</dc:creator><description>You're absolutely right, it does affect a lot of people... enough for me to think it was worthy of a post:)&lt;br&gt;&lt;br&gt;There is a &amp;quot;send a comment on this topic&amp;quot; link at the bottom of each msdn entry. If you find something like this that you feel that there would be a benefit to have in the msdn docs. I urge you to use this comment feature. It's a great way to make sure that others do not fall into the same traps. </description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#517346</link><pubDate>Wed, 25 Jan 2006 15:23:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:517346</guid><dc:creator>Tom Harris</dc:creator><description>Hi there,&lt;br&gt;&lt;br&gt;I just wanted to let you guys know that we have a dedicated .NET memory profiling tool that can really help you with these sort of problems. For the scenario described, you would simply point our tool at the web application and take 2 snapshots. The tool will then show you what new objects have been created. Finding the offending leak is straightforard as the tool shows which objects reference which other objects. It will even show you the exact source code for when the offending EventHandler object is created. I will write a technical article for Red Gate outlining the procedure in more detail. In the meantime, do try out ANTS Profiler next time you are concerned about memory issues in .NET applications.&lt;br&gt;&lt;br&gt;Many thanks,&lt;br&gt;&lt;br&gt;Tom Harris</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#549515</link><pubDate>Sat, 11 Mar 2006 20:40:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:549515</guid><dc:creator>dblack</dc:creator><description>Another great read!</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#550776</link><pubDate>Tue, 14 Mar 2006 01:03:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:550776</guid><dc:creator>Paul</dc:creator><description>&amp;quot;The moral of the story here is: be very careful if you are hooking up event handlers to objects that have a longer lifespan than the page.&amp;quot;&lt;br&gt;&lt;br&gt;Is there anyway to tell a form to remove all of its event handlers from any objects it is referenced by on disposal?&lt;br&gt;&lt;br&gt;Why wouldn't you want this to occur by default? &amp;nbsp;(Why doesn't the .NET framework do this for us by default?)&lt;br&gt;&lt;br&gt;Thanks,&lt;br&gt;&lt;br&gt;Paul</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#551002</link><pubDate>Tue, 14 Mar 2006 09:38:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:551002</guid><dc:creator>Tess</dc:creator><description>Because the objects are never disposed. &amp;nbsp;As long as something is holding on to the eventhandlers and pages etc. &amp;nbsp;they are not ready for garbage collection. &amp;nbsp;&lt;br&gt;&lt;br&gt;The framework can't do this because we have explicitly told it not to, by holding on to the static object. IMHO it would be a bug if the framework randomly removed event handlers. </description></item><item><title>ASP.NET Quiz Answers: Does Page.Cache leak memory?</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#695270</link><pubDate>Fri, 11 Aug 2006 12:36:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:695270</guid><dc:creator>If broken it is, fix it you should</dc:creator><description>A few days ago I posted a question I had gotten on email (look here for complete post): &amp;amp;amp;nbsp; &amp;amp;quot;We use...</description></item><item><title>Event Handlers Gone Wild</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#741668</link><pubDate>Wed, 06 Sep 2006 00:10:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:741668</guid><dc:creator>Todd Carter's WebLog</dc:creator><description>Today I ran across an issue that my good buddy Tess hit with one of her customers&amp;amp;amp;nbsp;a while back....</description></item><item><title>Quick things to check if you are leaking your memory</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#770315</link><pubDate>Mon, 25 Sep 2006 13:00:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:770315</guid><dc:creator>A developer's strayings</dc:creator><description>After a couple of years working in InternetDev support I've seen many different kind of problems reported...</description></item><item><title>Quick things to check if you are leaking your memory</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#798311</link><pubDate>Sat, 07 Oct 2006 00:48:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:798311</guid><dc:creator>A developer's strayings</dc:creator><description>&lt;p&gt;After a couple of years working in InternetDev support I've seen many different kind of problems reported&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1042829</link><pubDate>Thu, 09 Nov 2006 08:47:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1042829</guid><dc:creator>Kamran Shahid</dc:creator><description>&lt;p&gt;Hi Tess.It is the Wonderful article.&lt;/p&gt;
&lt;p&gt;I just want's to ask what should I do to debug windows mobile 5.0 application.It have both type of modules that is managed and unmanaged.I want's to log unhandled exception.&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1043018</link><pubDate>Thu, 09 Nov 2006 10:48:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1043018</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Thank you,&lt;/p&gt;
&lt;p&gt;I don't believe there are any debuggers that will work on a mobile device, but I believe you should be able to debug the emulator process. &amp;nbsp; I haven't tried it yet, but you peaked my interest:)&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1080512</link><pubDate>Wed, 15 Nov 2006 13:08:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1080512</guid><dc:creator>ght</dc:creator><description>&lt;p&gt;0x0213b483 0x0213b488 &amp;nbsp; &amp;nbsp;None &amp;nbsp; [DEFAULT] [hasThis] Void MemoryIssues.WebForm1.Button1_Click&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1273076</link><pubDate>Wed, 13 Dec 2006 11:11:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1273076</guid><dc:creator>MengSung</dc:creator><description>&lt;p&gt;Thank you ess. But do you really fix the problem by unhook ? I don't know why my code just &amp;nbsp;can not unhook anyway. Could you tell me what's wrong with my VB.NET code.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;' Here I Hook&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AddHandler m_MailItem.Open, New Microsoft.Office.Interop.Outlook.ItemEvents_10_OpenEventHandler(AddressOf m_MailItem_Open)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AddHandler m_MailItem.Close, New Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(AddressOf m_MailItem_Close)&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;' Here I do Unhook &lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RemoveHandler m_MailItem.Open, New Microsoft.Office.Interop.Outlook.ItemEvents_10_OpenEventHandler(AddressOf m_MailItem_Open)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RemoveHandler m_MailItem.Close, New Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(AddressOf m_MailItem_Close)&lt;/p&gt;
&lt;p&gt;=========================&lt;/p&gt;
&lt;p&gt;Windbg result&lt;/p&gt;
&lt;p&gt;0:036&amp;gt; !gcroot 06766a14 &lt;/p&gt;
&lt;p&gt;Note: Roots found on stacks may be false positives. Run &amp;quot;!help gcroot&amp;quot; for&lt;/p&gt;
&lt;p&gt;more info.&lt;/p&gt;
&lt;p&gt;Scan Thread 0 OSTHread a34&lt;/p&gt;
&lt;p&gt;Scan Thread 17 OSTHread d58&lt;/p&gt;
&lt;p&gt;Scan Thread 18 OSTHread b08&lt;/p&gt;
&lt;p&gt;Scan Thread 14 OSTHread 118&lt;/p&gt;
&lt;p&gt;Scan Thread 12 OSTHread f64&lt;/p&gt;
&lt;p&gt;DOMAIN(061835F8):HANDLE(WeakSh):8c513c0:Root:06766a14(ItemWrapper.ItemWrapper)&lt;/p&gt;
&lt;p&gt;DOMAIN(061835F8):HANDLE(RefCnt):8c51484:Root:06845650(Microsoft.Office.Interop.Outlook.ItemEvents_10_SinkHelper)-&amp;gt;&lt;/p&gt;
&lt;p&gt;06845630(Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler)-&amp;gt;&lt;/p&gt;
&lt;p&gt;06766a14(ItemWrapper.ItemWrapper)&lt;/p&gt;
&lt;p&gt;DOMAIN(061835F8):HANDLE(RefCnt):8c5148c:Root:06766ecc(Microsoft.Office.Interop.Outlook.ItemEvents_10_SinkHelper)-&amp;gt;&lt;/p&gt;
&lt;p&gt;06766a90(Microsoft.Office.Interop.Outlook.ItemEvents_10_OpenEventHandler)-&amp;gt;&lt;/p&gt;
&lt;p&gt;06766a14(ItemWrapper.ItemWrapper)&lt;/p&gt;
&lt;p&gt;==========================&lt;/p&gt;
&lt;p&gt;It works fine to hook the event but it has memory leak.&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1273169</link><pubDate>Wed, 13 Dec 2006 11:21:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1273169</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Hi MengSung,&lt;/p&gt;
&lt;p&gt;Where do you hook and unhook them? Are you sure that your unhook code has run at this point? &amp;nbsp;If it has you shouldn't see this... &lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1376179</link><pubDate>Thu, 28 Dec 2006 23:54:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1376179</guid><dc:creator>Deepak Kumar</dc:creator><description>&lt;p&gt;Do we need to remove the references which says &lt;/p&gt;
&lt;p&gt;HANDLE(WeakSh) or HANDLE(WeakLn).&lt;/p&gt;
&lt;p&gt;Please reply asap. it is very urgent. thanks&lt;/p&gt;
</description></item><item><title>ASP.NET Quiz Answers: Does Page.Cache leak memory?</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1410417</link><pubDate>Thu, 04 Jan 2007 13:05:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1410417</guid><dc:creator>If broken it is, fix it you should</dc:creator><description>&lt;p&gt;A few days ago I posted a question I had gotten on email (look here for complete post): &amp;quot; We use Page.Cache&lt;/p&gt;
</description></item><item><title>Event Handlers Gone Wild</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#1742012</link><pubDate>Thu, 22 Feb 2007 17:44:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1742012</guid><dc:creator>Todd Carter's WebLog</dc:creator><description>&lt;p&gt;Today I ran across an issue that my good buddy Tess hit with one of her customers a while back. The application&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#3800476</link><pubDate>Tue, 10 Jul 2007 19:33:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3800476</guid><dc:creator>Allen Owen</dc:creator><description>&lt;p&gt;Tess, your blog has just saved me! I've been fighting a serious memory leak for the last 2 weeks, and have been faithfully following the techniques that you propose.&lt;/p&gt;
&lt;p&gt;After much soul searching, and memory exploration, I found this private member variable set in one of my classes:&lt;/p&gt;
&lt;p&gt;HttpContext _context = HttpContext.Current&lt;/p&gt;
&lt;p&gt;Nuff said? It looks like this object was the root cause of all my trouble.&lt;/p&gt;
&lt;p&gt;Anyway, thanks very much, couldn't have done it without your insight. By the way, the site, from being a 1.5 Gb memory hog in about 2 hours is now running very smoothly at about 129 000Kb simulating 1 200 users doing large financial transactions! &lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Allen&lt;/p&gt;</description></item><item><title>ASP.NET Memory Investigation</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#4368810</link><pubDate>Mon, 13 Aug 2007 17:54:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4368810</guid><dc:creator>If broken it is, fix it you should</dc:creator><description>&lt;p&gt;This is a bit of a continuation of ASP.NET Memory Issue: High memory usage in a 64bit w3wp.exe process&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#5790080</link><pubDate>Wed, 31 Oct 2007 06:26:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5790080</guid><dc:creator>vikram nayak</dc:creator><description>&lt;p&gt;excellent article. thanks&lt;/p&gt;</description></item><item><title>ASP.NET Memory: Thou shalt not store UI objects in cache or session scope</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#8556501</link><pubDate>Wed, 28 May 2008 15:23:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8556501</guid><dc:creator>If broken it is, fix it you should</dc:creator><description>&lt;p&gt;ASP.NET Memory: Thou shalt not store UI objects in cache or session scope Surprisingly the issue I wrote&lt;/p&gt;
</description></item><item><title>ASP.NET Memory Issues - High Memory Usage with AjaxPro (fixed in current version)</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#8951734</link><pubDate>Sun, 14 Sep 2008 18:05:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8951734</guid><dc:creator>If broken it is, fix it you should</dc:creator><description>&lt;p&gt;I was helping a colleague out with an OOM (OutOfMemory) situation he was dealing with. Problem description:&lt;/p&gt;
</description></item><item><title>Don't store ASP.NET controls in Session, Application or Cache</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#8960495</link><pubDate>Sun, 21 Sep 2008 14:12:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8960495</guid><dc:creator>Readed By Wrocław NUG members</dc:creator><description>&lt;p&gt;In some cases you may end up with the following exception when working with RadControls for ASP.NET Ajax&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9132335</link><pubDate>Sat, 22 Nov 2008 01:06:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9132335</guid><dc:creator>Vince Fabro</dc:creator><description>&lt;p&gt;Tess -- this (almost) 3-year old article really helped me troubleshoot a memory leak today. &amp;nbsp;I was able to isolate the 2 classes that are not being disposed, although I was unable to track them down to their root references. &amp;nbsp;When I ran !gcroot on them it just listed the threads and HandleTables, no actual classes. &amp;nbsp;This is a multi-threaded app -- does that make it more difficult to trace the root reference? &amp;nbsp;Is there a way to track down the root reference in this situation?&lt;/p&gt;
&lt;p&gt;Thanks, Vince&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9132373</link><pubDate>Sat, 22 Nov 2008 01:50:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9132373</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Hi Vince,&lt;/p&gt;
&lt;p&gt;All .net apps are multi threaded so not sure what you mean there. &amp;nbsp;Do you mean that the app spins up its own threads? in either case it won't make a difference.&lt;/p&gt;
&lt;p&gt;To answer your question it would help if you posted some gcroot output.&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9138405</link><pubDate>Mon, 24 Nov 2008 21:57:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9138405</guid><dc:creator>Vince Fabro</dc:creator><description>&lt;p&gt;Thanks for your quick reply. &amp;nbsp;(BTW, I'm using .Net 1.1 and VS 2003.)&lt;/p&gt;
&lt;p&gt;By multi-threaded I mean that I'm manually creating threads to run various jobs. &amp;nbsp;I'm not familiar enough with WinDbg to know if my threads are somehow hiding the details I'm looking for.&lt;/p&gt;
&lt;p&gt;I followed the steps you discussed above, and here is some of that output for you...&lt;/p&gt;
&lt;p&gt;--------------------&lt;/p&gt;
&lt;p&gt;!dumpheap -stat&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt; &amp;nbsp;e1d1dc &amp;nbsp; &amp;nbsp;26894 &amp;nbsp; &amp;nbsp;430304 Oracle.DataAccess.Client.OracleParameterCollection&lt;/p&gt;
&lt;p&gt; &amp;nbsp;9826b0 &amp;nbsp; &amp;nbsp; 1148 &amp;nbsp; &amp;nbsp;574548 System.Byte[]&lt;/p&gt;
&lt;p&gt;79ba2f5c &amp;nbsp; &amp;nbsp;29305 &amp;nbsp; &amp;nbsp;703320 System.Collections.ArrayList&lt;/p&gt;
&lt;p&gt;79b980a4 &amp;nbsp; &amp;nbsp;45053 &amp;nbsp; &amp;nbsp;901060 System.Threading.ManualResetEvent&lt;/p&gt;
&lt;p&gt;79bf4c3c &amp;nbsp; &amp;nbsp;45239 &amp;nbsp; &amp;nbsp;904780 System.Threading.WaitHandle/__WaitHandleHandleProtector&lt;/p&gt;
&lt;p&gt;79baaff0 &amp;nbsp; &amp;nbsp;91280 &amp;nbsp; 1095360 System.Int32&lt;/p&gt;
&lt;p&gt;79c0d748 &amp;nbsp; &amp;nbsp;44884 &amp;nbsp; 1436288 System.Threading.Overlapped&lt;/p&gt;
&lt;p&gt;79bc3c2c &amp;nbsp; &amp;nbsp;80358 &amp;nbsp; 1928592 System.Decimal&lt;/p&gt;
&lt;p&gt;79b946b0 &amp;nbsp; &amp;nbsp;61868 &amp;nbsp; 2125680 System.String&lt;/p&gt;
&lt;p&gt; &amp;nbsp;98209c &amp;nbsp; &amp;nbsp;30237 &amp;nbsp; 2359624 System.Object[]&lt;/p&gt;
&lt;p&gt;7b35fc9c &amp;nbsp; &amp;nbsp;45256 &amp;nbsp; 3801504 System.Net.NestedSingleAsyncResult&lt;/p&gt;
&lt;p&gt;7b367b0c &amp;nbsp; &amp;nbsp;44884 &amp;nbsp; 5386080 System.Net.Sockets.OverlappedAsyncResult&lt;/p&gt;
&lt;p&gt; &amp;nbsp;1505c0 &amp;nbsp; &amp;nbsp; 5686 &amp;nbsp;12917492 &amp;nbsp; &amp;nbsp; &amp;nbsp;Free&lt;/p&gt;
&lt;p&gt; &amp;nbsp;e1fb78 &amp;nbsp; 188197 &amp;nbsp;21830852 Oracle.DataAccess.Client.OracleParameter&lt;/p&gt;
&lt;p&gt;---------------------&lt;/p&gt;
&lt;p&gt;There's an obvious leak with OracleParameter and OverlappedAsyncResult. &amp;nbsp;I can manually dispose of the Oracle parameters (but I shouldn't have to as I'm disposing of all parent references) and I've found there's a known issue with leaking OverlappedAsyncResult instances, but I haven't found the solution to that.&lt;/p&gt;
&lt;p&gt;Tracking down further, here's a sample gcroot for one of the Oracle parameter objects:&lt;/p&gt;
&lt;p&gt;----------------------&lt;/p&gt;
&lt;p&gt;Scan Thread 0 (1b84)&lt;/p&gt;
&lt;p&gt;Scan Thread 2 (5f0)&lt;/p&gt;
&lt;p&gt;Scan Thread 6 (2014)&lt;/p&gt;
&lt;p&gt;Scan Thread 7 (1fa0)&lt;/p&gt;
&lt;p&gt;Scan Thread 8 (1308)&lt;/p&gt;
&lt;p&gt;Scan Thread 9 (2268)&lt;/p&gt;
&lt;p&gt;Scan Thread 10 (235c)&lt;/p&gt;
&lt;p&gt;Scan Thread 11 (2214)&lt;/p&gt;
&lt;p&gt;Scan Thread 12 (1cd0)&lt;/p&gt;
&lt;p&gt;Scan Thread 13 (1818)&lt;/p&gt;
&lt;p&gt;Scan Thread 14 (1ed8)&lt;/p&gt;
&lt;p&gt;Scan Thread 19 (de8)&lt;/p&gt;
&lt;p&gt;Scan HandleTable 14a5b0&lt;/p&gt;
&lt;p&gt;Scan HandleTable 14d330&lt;/p&gt;
&lt;p&gt;----------------------&lt;/p&gt;
&lt;p&gt;This is where I get stuck. &amp;nbsp;Unlike your examples above, none of these point to a specific class reference. &amp;nbsp;Is there something I can do to track down the root references to all these stranded instances?&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Vince&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9141023</link><pubDate>Tue, 25 Nov 2008 10:19:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9141023</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Hi Vince,&lt;/p&gt;
&lt;p&gt;As you mention the !dumpheap -stat output shows that there seems to be something fishy with the amount of OracleParamenters in memory. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;The gcroot output however shows that there are no roots for the object that you did !gcroot on which means one of 4 things&lt;/p&gt;
&lt;p&gt;1. The object is not rooted so it is ready for garbage collection. &amp;nbsp;(read &lt;a rel="nofollow" target="_new" href="http://blogs.msdn.com/tess/archive/2006/02/02/net-memory-my-object-is-not-rooted-why-wasn-t-it-garbage-collected.aspx"&gt;http://blogs.msdn.com/tess/archive/2006/02/02/net-memory-my-object-is-not-rooted-why-wasn-t-it-garbage-collected.aspx&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;p&gt;2. You stopped the command you ran prior to running !gcroot so the sos cache was left in an inconsistent state and doesnt show roots. &amp;nbsp;If you break a command, sometimes you have to run !gcroot twice to see some good results.&lt;/p&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;p&gt;3. You are in the middle of a gc so the heap is in &amp;quot;movement&amp;quot; and thus gcroot doesn't give correct results (see if one of the threads is calling garbagecollectgeneration in the native stack)&lt;/p&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;p&gt;4. You ran gcroot on the MT (method table) rather than an instance of an object. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;If I were you, i would pick a couple of the OracleParameters and run !gcroot on them to see if maybe you just caught one that wasnt rooted while the others are. &amp;nbsp;or better yet, try to root some of the OracleParameterCollections (since those will be holding the OracleParameters) or maybe even some OracleCommands or similar. &amp;nbsp;&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9141025</link><pubDate>Tue, 25 Nov 2008 10:20:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9141025</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Also, if you can't find the roots, no matter how hard you try, &amp;nbsp;then dump some of the oracleparameters out to see what they are, maybe that will give you a clue why there are so many on the heap.&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9165821</link><pubDate>Tue, 02 Dec 2008 22:42:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9165821</guid><dc:creator>Vince Fabro</dc:creator><description>&lt;p&gt;It turns out that the finalizer thread was hung due to the STA thread issue that you blogged about elsewhere. &amp;nbsp;I changed the &amp;quot;main&amp;quot; by adding [MTAThread] and that appears to have fixed it. &amp;nbsp;I guess that also explains why they weren't rooted.&lt;/p&gt;
&lt;p&gt;Thanks for your help!&lt;/p&gt;
&lt;p&gt;Vince&lt;/p&gt;</description></item><item><title>The Event Handler That Cried Wolf</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9319448</link><pubDate>Thu, 15 Jan 2009 00:27:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9319448</guid><dc:creator>Infinities Loop</dc:creator><description>&lt;p&gt;I ran into an interesting and unexpected behavior in ASP.NET AJAX event handling the other day. Once&lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9579557</link><pubDate>Thu, 30 Apr 2009 13:16:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9579557</guid><dc:creator>jcentauri</dc:creator><description>&lt;p&gt;Very useful and well structured blog here. Thanks for sharing all this information with us. &lt;/p&gt;
&lt;p&gt;This post helped me to test a custom control which I designed. &lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9872494</link><pubDate>Mon, 17 Aug 2009 19:49:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9872494</guid><dc:creator>mling</dc:creator><description>&lt;p&gt;Hi, Tess,&lt;/p&gt;
&lt;p&gt;I ran into this article when I'm trying to find out some hint for my problem. May be you can give me some clue.&lt;/p&gt;
&lt;p&gt;I have a WinForm application which has several working threads that receive data from IO and display these data on several forms. A form receives notification to display either from the input thread or the output thread. Mostly it works well, but sometimes we notice that there is no display for the input and we realize that the input thread stopped somewhere. From the logs we got to the point where the code notify the form by event. My suspect for the issue are:&lt;/p&gt;
&lt;p&gt;1 - Some wrong code we implemented. We can't see any, but still looking for it. The error must be very subtle, since the application sometime runs well for a week under the same condition&lt;/p&gt;
&lt;p&gt;2 - Some unknown behaviour by using thread, event and delegate&lt;/p&gt;
&lt;p&gt;3 - Timing issue. My feeling is now I add many log into the code, it's harder to get the input stop.&lt;/p&gt;
&lt;p&gt;3 - GC.&lt;/p&gt;
&lt;p&gt;The application was implemented using .net 1.1.&lt;/p&gt;
&lt;p&gt;Do you have any idea what is going on and what can I do to get close to it.&lt;/p&gt;
&lt;p&gt;Thanks in advance,&lt;/p&gt;
&lt;p&gt;Mling&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9890125</link><pubDate>Wed, 02 Sep 2009 02:35:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890125</guid><dc:creator>alan</dc:creator><description>&lt;p&gt;I am trying to find the method that an event handler is pointing to in a 64 bit process dump&lt;/p&gt;
&lt;p&gt;I can't seem to find much info on this and was hoping you might be able to help???&lt;/p&gt;
&lt;p&gt;0:007&amp;gt; !do 00000000116d70d8&lt;/p&gt;
&lt;p&gt;Name: System.Windows.Forms.DataGridViewCellMouseEventHandler&lt;/p&gt;
&lt;p&gt;MethodTable: 0000064276a10a38&lt;/p&gt;
&lt;p&gt;EEClass: 0000064276ad3698&lt;/p&gt;
&lt;p&gt;Size: 64(0x40) bytes&lt;/p&gt;
&lt;p&gt; (M:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll)&lt;/p&gt;
&lt;p&gt;Fields:&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MT &amp;nbsp; &amp;nbsp;Field &amp;nbsp; Offset &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type VT &amp;nbsp; &amp;nbsp; Attr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Value Name&lt;/p&gt;
&lt;p&gt;000006427881d280 &amp;nbsp;40000f9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.Object &amp;nbsp;0 instance 00000000113ff0d0 _target&lt;/p&gt;
&lt;p&gt;0000064278852e60 &amp;nbsp;40000fa &amp;nbsp; &amp;nbsp; &amp;nbsp; 10 ...ection.MethodBase &amp;nbsp;0 instance 0000000000000000 _methodBase&lt;/p&gt;
&lt;p&gt;000006427882b818 &amp;nbsp;40000fb &amp;nbsp; &amp;nbsp; &amp;nbsp; 18 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.IntPtr &amp;nbsp;0 instance &amp;nbsp; &amp;nbsp; &amp;nbsp;-2145899464 _methodPtr&lt;/p&gt;
&lt;p&gt;000006427882b818 &amp;nbsp;40000fc &amp;nbsp; &amp;nbsp; &amp;nbsp; 20 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.IntPtr &amp;nbsp;0 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 _methodPtrAux&lt;/p&gt;
&lt;p&gt;000006427881d280 &amp;nbsp;4000106 &amp;nbsp; &amp;nbsp; &amp;nbsp; 28 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.Object &amp;nbsp;0 instance 0000000000000000 _invocationList&lt;/p&gt;
&lt;p&gt;000006427882b818 &amp;nbsp;4000107 &amp;nbsp; &amp;nbsp; &amp;nbsp; 30 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.IntPtr &amp;nbsp;0 instance &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 _invocationCount&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9890280</link><pubDate>Wed, 02 Sep 2009 11:16:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890280</guid><dc:creator>Tess</dc:creator><description>&lt;p&gt;Its a bit tricky to find it. &amp;nbsp;The easiest way is probably to dump out the target and look at any methods it has that might be handling it.&lt;/p&gt;
&lt;p&gt;If you are worried about that eventhandler from a memory leak perspective, i do think you might be going down the wrong track though as that is a typical UI object that will go out of scope with the form so it wont keep the target alive an unneccessary amount of time (unless you are storing the datagridview in a static or something)... &amp;nbsp; &lt;/p&gt;
&lt;p&gt;If your datagrid has a lot of rows, you will have a lot of these eventhandlers but probably all pointing back to the same form. &amp;nbsp; &amp;nbsp;If you have a lot of them, i would look into the number of rows more than these eventhandlers.&lt;/p&gt;
&lt;p&gt;I might be wrong though as i havent seen the rest of the data but that is just my first instinct seeing this info. &lt;/p&gt;
</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9916692</link><pubDate>Tue, 03 Nov 2009 11:29:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9916692</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Still excellent 3 years later! &lt;/p&gt;
&lt;p&gt;Thanks Tess,&lt;/p&gt;
&lt;p&gt;Chris&lt;/p&gt;</description></item><item><title>re: .NET Memory Leak Case Study: The Event Handlers That Made The Memory Baloon</title><link>http://blogs.msdn.com/tess/archive/2006/01/23/net-memory-leak-case-study-the-event-handlers-that-made-the-memory-baloon.aspx#9931928</link><pubDate>Thu, 03 Dec 2009 12:18:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9931928</guid><dc:creator>alejacma</dc:creator><description>&lt;p&gt;Note that if you get &amp;quot;not in jit code range&amp;quot; when running &amp;quot;!ip2md&amp;quot;, you may also do this directly: &amp;quot;u 0n34845811&amp;quot;. In the dump I'm currently looking, I can see the name of the method in the very first line of the output of &amp;quot;u&amp;quot;. No need to do all the &amp;quot;!dumpclass ; !dumpmt ; etc.&amp;quot; thing to find the method of the event handler.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;</description></item></channel></rss>