<?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>When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx</link><description>One of my first postings was this one: Two things to avoid for better memory usage in which I gave some approximately correct advice (is there any other kind? &amp;lt;g&amp;gt;) about using GC.Collect(). I still stand by this advice but I think maybe this is</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#271856</link><pubDate>Mon, 29 Nov 2004 21:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:271856</guid><dc:creator>Matthew W. Jackson</dc:creator><description>Very informative, as usual.  I've often wondered if it would ever be wise to collect after closing a form.  While I'll be sure to remember rule #1, I'll be sure to consider rule #2 when a form works with large amounts of data.&lt;br&gt;&lt;br&gt;Which brings up another case where I'm wondering whether it *might* be okay to call GC.Collect():&lt;br&gt;&lt;br&gt;Although I haven't had the chance to test this idea, I've always thought that it might be good for a managed game to call GC.Collect before loading a new level.  For example, the game could show a &amp;quot;Level Loading&amp;quot; screen, call GC.Collect() to make sure the previous level isn't wasting memory, and then go on to actually load the new level data.  &lt;br&gt;&lt;br&gt;I know that this wouldn't be a one-time event in the same way as you describe, but in the context of a game I wouldn't it be better to force a garbage collection at a time when the user will already be waiting.  Since the amount of time between loading levels may vary drastically, will this actually help the garbage collector?&lt;br&gt;&lt;br&gt;Are you saying that the self-tuning garbage collector would actually work better in this case?  What about garbage collecting while a game is paused?&lt;br&gt;&lt;br&gt;Maybe I need to get a game written and go &amp;quot;measure.&amp;quot;  I'm really curious as to how well  the garbage collector can perform in a variety of scenarios.  I'd really like to see a few more games using managed code (at least for higher-level logic), and I'd hate to think the GC would be a big bottleneck.</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#271893</link><pubDate>Mon, 29 Nov 2004 22:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:271893</guid><dc:creator>timts</dc:creator><description>I wrote some simple console application. the problem is that it loads stuff from database continuously at high speed, so GC cant keep up with it!!!&lt;br&gt;&lt;br&gt;even gc.collect does no good so I have to do a forced global gc to fix the memory usage problem.&lt;br&gt;&lt;br&gt;it has nothing to do with forms.</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#271939</link><pubDate>Tue, 30 Nov 2004 00:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:271939</guid><dc:creator>Darren Oakey</dc:creator><description>hmm.... I would disagree...&lt;br&gt;&lt;br&gt;how about rule1: use GC.collect often and with a vengeance! :)  &lt;br&gt;&lt;br&gt;In my experience, the .net GC is a piece of **** and shouldn't be trusted.  We have found a number of production bugs that have been solved by a single introduction of GC.Collect.&lt;br&gt;&lt;br&gt;try it - make any batch routine that say - traverses your disk, opens each file and computes a checksum, and run it with task manager open - it's quite an eye-opener.  The memory just goes up... and up... and up...&lt;br&gt;&lt;br&gt;Now, insert the lines GC.Collect(), GC.WaitForPendingFinalizers() after processing each file.  Your job will run _quicker_, because the system isn't continuously allocating memory, and the memory usage of your program will remain constant.&lt;br&gt;&lt;br&gt;I would say&lt;br&gt;&lt;br&gt;rule 1: Use GC.Collect at the end of any major &amp;quot;operation&amp;quot;, or any form finishing&lt;br&gt;&lt;br&gt;rule 2: In any loop situation, always follow it with GC.WaitForPendingFinalizers&lt;br&gt;&lt;br&gt;rule 3: explicitly dispose anything that it's possible to dispose - to a large extent, pretend the GC doesn't exist, and you are in an old language.&lt;br&gt;</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#271941</link><pubDate>Tue, 30 Nov 2004 00:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:271941</guid><dc:creator>Denis Sakarov</dc:creator><description>Great post and yes it's all a matter of policy but there are more caveats to consider before applying Rule #2. Here's one : - Consider the following scenario, apps detects big form is closed so it calls GC.Collect(). The app hangs (or at least responsivness decreases) while the GC clearying Gen 2. &lt;br&gt;&lt;br&gt;Here's how I would do it. The user closes the form *and* she minimizes the app. Now you can call GC.Collect() because it's less likely the user will restore the app than it is for her to do something else in the app right after she closes the form.</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#271942</link><pubDate>Tue, 30 Nov 2004 00:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:271942</guid><dc:creator>Hector Correa</dc:creator><description>&amp;gt;if you're writing a client application and you &lt;br&gt;&amp;gt; display a very large and complicated form that &lt;br&gt;&amp;gt; has a lot of data associated with it.  &lt;br&gt;&lt;br&gt;Using Excel via InterOp seems to fit in this category. I've run into places where Excel will not quit unless you explicitly do GC.Collect() like described in this MS knowledge base article &lt;br&gt;&lt;br&gt;&lt;a target="_new" href="http://support.microsoft.com/default.aspx/kb/317109/EN-US/?"&gt;http://support.microsoft.com/default.aspx/kb/317109/EN-US/?&lt;/a&gt;</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272030</link><pubDate>Tue, 30 Nov 2004 03:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272030</guid><dc:creator>Kent</dc:creator><description>Thanks, great article Rico.&lt;br&gt;&lt;br&gt;@Darren. I thought I'd try your suggestion. Here is my code:&lt;br&gt;&lt;br&gt;&lt;br&gt;/////////////////////////////////////////////&lt;br&gt;using System;&lt;br&gt;using System.Diagnostics;&lt;br&gt;using System.IO;&lt;br&gt;using System.Threading;&lt;br&gt;&lt;br&gt;namespace GCTest {&lt;br&gt;	class Entry {&lt;br&gt;		static void Main(string[] args) {&lt;br&gt;			Console.WriteLine(&amp;quot;GCTest [-gc]&amp;quot;);&lt;br&gt;			bool collect = false;&lt;br&gt;			&lt;br&gt;			if ((args.Length &amp;gt; 1) &amp;amp;&amp;amp; (args[0] == &amp;quot;-gc&amp;quot;)) {&lt;br&gt;				collect = true;&lt;br&gt;			}&lt;br&gt;&lt;br&gt;			string[] rootDirNames = Directory.GetDirectories(@&amp;quot;C:\&amp;quot;);&lt;br&gt;			DirectoryInfo[] rootDirs = new DirectoryInfo[rootDirNames.Length];&lt;br&gt;&lt;br&gt;			for (int i = 0; i &amp;lt; rootDirs.Length; ++i) {&lt;br&gt;				rootDirs[i] = new DirectoryInfo(rootDirNames[i]);&lt;br&gt;			}&lt;br&gt;&lt;br&gt;			Thread infoThread = new Thread(new ThreadStart(OutputInfo));&lt;br&gt;			infoThread.Name = &amp;quot;info&amp;quot;;&lt;br&gt;			infoThread.IsBackground = true;&lt;br&gt;			infoThread.Start();&lt;br&gt;&lt;br&gt;			DateTime start = DateTime.Now;&lt;br&gt;			ulong sum = ComputeSum(rootDirs, collect);&lt;br&gt;			DateTime end = DateTime.Now;&lt;br&gt;&lt;br&gt;			infoThread.Abort();&lt;br&gt;			infoThread.Join();&lt;br&gt;&lt;br&gt;			Console.WriteLine(&amp;quot;Sum computed: {0}, took {1}&amp;quot;, sum, end - start);&lt;br&gt;			Console.ReadLine();&lt;br&gt;		}&lt;br&gt;&lt;br&gt;		private static long numFiles;&lt;br&gt;&lt;br&gt;		private static ulong ComputeSum(DirectoryInfo[] dirs, bool collect) {&lt;br&gt;			ulong retVal = 0;&lt;br&gt;&lt;br&gt;			foreach (DirectoryInfo dir in dirs) {&lt;br&gt;				if (dir.Exists) {&lt;br&gt;					foreach (FileInfo file in dir.GetFiles()) {&lt;br&gt;						if (file.Exists) {&lt;br&gt;							retVal += (ulong) file.Length;&lt;br&gt;							Interlocked.Increment(ref numFiles);&lt;br&gt;						}&lt;br&gt;&lt;br&gt;						if (collect) {&lt;br&gt;							GC.Collect();&lt;br&gt;							GC.WaitForPendingFinalizers();&lt;br&gt;						}&lt;br&gt;					}&lt;br&gt;&lt;br&gt;					retVal += ComputeSum(dir.GetDirectories(), collect);&lt;br&gt;				}&lt;br&gt;			}&lt;br&gt;&lt;br&gt;			return retVal;&lt;br&gt;		}&lt;br&gt;&lt;br&gt;		private static void OutputInfo() {&lt;br&gt;			Process p = Process.GetCurrentProcess();&lt;br&gt;&lt;br&gt;			int initialVM = p.VirtualMemorySize;&lt;br&gt;			int initialWS = p.WorkingSet;&lt;br&gt;			int initialTotal = p.VirtualMemorySize + p.WorkingSet;&lt;br&gt;&lt;br&gt;			while (true) {&lt;br&gt;				p.Refresh();&lt;br&gt;				int vm = p.VirtualMemorySize;&lt;br&gt;				int ws = p.WorkingSet;&lt;br&gt;				int tot = p.VirtualMemorySize + p.WorkingSet;&lt;br&gt;&lt;br&gt;				Console.WriteLine(&amp;quot;Virtual Memory: {0} (delta {1})&amp;quot;, vm, vm - initialVM);&lt;br&gt;				Console.WriteLine(&amp;quot;Working Set: {0} (delta {1})&amp;quot;, ws, ws - initialWS);&lt;br&gt;				Console.WriteLine(&amp;quot;Total Memory Usage: {0} (delta {1})&amp;quot;, tot, tot - initialTotal);&lt;br&gt;				Console.WriteLine(&amp;quot;Number of files processed: {0}&amp;quot;, numFiles);&lt;br&gt;				Console.WriteLine(string.Empty);&lt;br&gt;&lt;br&gt;				Thread.Sleep(1000);&lt;br&gt;			}&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;}&lt;br&gt;/////////////////////////////////////////////&lt;br&gt;&lt;br&gt;&lt;br&gt;With my very simple testing, this ran faster without explicit GC'ing.&lt;br&gt;&lt;br&gt;Maybe I've just done something stupid in my code but I'd be interested to see what other people find.&lt;br&gt;&lt;br&gt;My C:\ has 97217 files on it. I ran a Release build without an attached debugger. I choose to drink Coke.</description></item><item><title>GC.Collect() Good or Bad?</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272133</link><pubDate>Tue, 30 Nov 2004 11:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272133</guid><dc:creator>Avnrao's Blog</dc:creator><description>GC.Collect() Good or Bad?</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272148</link><pubDate>Tue, 30 Nov 2004 08:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272148</guid><dc:creator>Chris Nahr</dc:creator><description>I had a scenario similar to what Matthew Jackson described. In a strategy game written in C#, I let the AI work in a background thread on a deep copy of the current game configuration. As the game turns progress, many deep copies are created and swapped with each other, making earlier copies obsolete.&lt;br&gt;&lt;br&gt;Now when the configuration gets big (10 MB or more), I experience pretty much what Darren Oakey said. Performance is dramatically better when I do an explicit garbage collection before performing a deep copy.&lt;br&gt;&lt;br&gt;GC &amp;quot;auto-tuning&amp;quot; really seems quite helpless when lots of big objects are allocated, and automatic GC is for some reason much slower than manual GC in this case.</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272163</link><pubDate>Tue, 30 Nov 2004 09:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272163</guid><dc:creator>Paul Hill</dc:creator><description>&amp;gt; Here's how I would do it. The user closes &lt;br&gt;&amp;gt; the form *and* she minimizes the app. &lt;br&gt;&amp;gt; Now you can call GC.Collect() because it's&lt;br&gt;&amp;gt; less likely the user will restore the app &lt;br&gt;&amp;gt; than it is for her to do something else in&lt;br&gt;&amp;gt; the app right after she closes the form.&lt;br&gt;&lt;br&gt;Except minimising means they've moved onto something else, and on a constrained system you've just forced the GC to hard fault page after page while it collects.  On a workstation the GC runs in it's own thread, so responsiveness isn't typically an issue.&lt;br&gt;&lt;br&gt;&amp;gt; Performance is dramatically better when I do&lt;br&gt;&amp;gt; an explicit garbage collection before&lt;br&gt;&amp;gt; performing a deep copy. &lt;br&gt;&lt;br&gt;Have you thought about serialization rather than a deep copy in this instance?&lt;br&gt;</description></item><item><title>Memory and Performance in .NET</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272165</link><pubDate>Tue, 30 Nov 2004 12:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272165</guid><dc:creator>Dela's Ramblings</dc:creator><description /></item><item><title>OdeToCode News</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272241</link><pubDate>Tue, 30 Nov 2004 17:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272241</guid><dc:creator>OdeToCode Link Blog</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272249</link><pubDate>Tue, 30 Nov 2004 14:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272249</guid><dc:creator>Eric Newton</dc:creator><description>You guys are running into the GC not knowing the true memory pressure of some of the Gen2 objects that represent unmanaged resources.&lt;br&gt;&lt;br&gt;Framework v2 introduces an additional metric (in theory that should be applied to unmanaged resources wrappers) that indicate to the GC the true memory pressure of the given managed object.&lt;br&gt;&lt;br&gt;For instance, consider a managed class that represents a 100KB byte array that is in the unmanaged world... to the GC, the managed object is only a measly 100 bytes (basically the pointer to the 100KB unmanaged bytes), so it gets a much lower memory pressure priority then a managed object with a much more complex call graph.  Framework v2 introduces GC.AddMemoryPressure (or similar) that allows you to &amp;quot;attach&amp;quot; the 100KB byte array (as a metric only) to the managed object.  So now the GC sees the managed object has causing a 100KB + 100byte memory consumer, and will prioritize accordingly.&lt;br&gt;&lt;br&gt;So for Framework v1.*, GC.Collect() makes sense after certain un-often run areas of the app, but even this changes for Framework v2.  &lt;br&gt;&lt;br&gt;Windows Forms objects will get a semi-automatic upgrade because the object that supplies Handle property that is present on all Form controls is being upgraded to include this metric.&lt;br&gt;&lt;br&gt;Use this search to find out more info from various .Net power-speakers (including EricGu), regarding Framework v2 memory pressure:&lt;br&gt;&lt;a target="_new" href="http://google.com/search?q=gc%20memory%20pressure"&gt;http://google.com/search?q=gc%20memory%20pressure&lt;/a&gt;</description></item><item><title>OdeToCode News</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272279</link><pubDate>Tue, 30 Nov 2004 18:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272279</guid><dc:creator>OdeToCode Link Blog</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272381</link><pubDate>Tue, 30 Nov 2004 17:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272381</guid><dc:creator>Chris Nahr</dc:creator><description>Paul, I'm afraid I don't understand your question:&lt;br&gt;&lt;br&gt;&amp;quot;Have you thought about serialization rather than a deep copy in this instance?&amp;quot;&lt;br&gt;&lt;br&gt;All deep copies that are not discarded must remain in memory. The user looks at the old configuration while the AI works on a deep copy. If there is a prediction tree, multiple deep copies must remain in memory for the AI. How would serialization help me here?</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272386</link><pubDate>Tue, 30 Nov 2004 18:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272386</guid><dc:creator>Rico Mariani</dc:creator><description>Some thoughts on this: &lt;br&gt;&lt;br&gt;The most important thought is that it is astonishingly hard to comment on the performance of other people's applications in any intelligent way. So I'm going to take some guesses based on experience that I think are generally useful but please don't take this to mean that I think you're wrong about your specific situation. I'm sort of in the advice business so I have to assume it's &amp;quot;horses&amp;quot; and not &amp;quot;zebras&amp;quot; even though I know sometimes it really is &amp;quot;zebras.&amp;quot; &lt;br&gt;&lt;br&gt;OK with that disclaimer here's the real thoughts :) &lt;br&gt;&lt;br&gt;1) Eric is absolutely right that in Framework v1.1 there was no way to explain to the garbage collector that you have some managed objects that are holding on to a whole lot of unmanaged memory (e.g. bitmaps). In those cases the aggressiveness of the collector should be related to the full memory pressure, not just the managed size of the holder. Framework 2.0 introduces GC.AddMemoryPressure() and RemoveMemoryPressure() which can be used to indicate the &amp;quot;collatoral&amp;quot; allocations associated with managed objects so that the GC has a clue. &lt;br&gt;&lt;br&gt;2) When you have objects like in (1) it is vitally important that you use the Dispose pattern to reclaim as many as possible. If some have exotic lifetime they will be collected for you of course but it is much better to Dispose all the ones you can. &lt;br&gt;&lt;br&gt;See this article for more information: &lt;br&gt;&lt;a target="_new" href="http://weblogs.asp.net/ricom/archive/2004/05/19/135332.aspx"&gt;http://weblogs.asp.net/ricom/archive/2004/05/19/135332.aspx&lt;/a&gt; &lt;br&gt;&lt;br&gt;3) If you are in a situation where regular calling of GC.Collect() in some cyclical fashion is necessary you are going to be in a world of hurt performance-wise. Forced collections like that are going to wreak havoc with the statistics gathering ability of the collector -- I have this mental image of an engine with too much fuel or not enough air or both (or is that really the same thing &amp;lt;g&amp;gt;) &lt;br&gt;&lt;br&gt;If you have an application that has a lot of objects that are going into Generation 2 and then dying (some of the above sound like that *could* be what's going on) then you are making things very difficult for the collector. You could have &amp;quot;mid life crisis&amp;quot; (see &lt;a target="_new" href="http://weblogs.asp.net/ricom/archive/2003/12/04/41281.aspx"&gt;http://weblogs.asp.net/ricom/archive/2003/12/04/41281.aspx&lt;/a&gt; and &lt;a target="_new" href="http://weblogs.asp.net/ricom/archive/2004/02/11/71143.aspx"&gt;http://weblogs.asp.net/ricom/archive/2004/02/11/71143.aspx&lt;/a&gt;) &lt;br&gt;&lt;br&gt;Now it could be that you reclaim memory faster by forcing more collections, but doing that on a regular basis will cause your percent-time-in-GC to shoot up. You are more likely to get better performance by adopting a strategy that avoids cyclical deaths of objects in Generation 2. The two links discuss ways of accomplishing that. &lt;br&gt;&lt;br&gt;4) Notwithstanding the bad experiences some of you have obviously had, collecting often isn't the right answer. If you must begin coding with the supposition that the GC is a piece of @#$% really you're doomed from the outset. I certainly will not say that managed code is the best solution to every problem -- I used to work on the C++ team and I can tell you those tools have never been better. If they are the right answer then by all means reach for them. After all I'm in the developer productivity business not the developer punishment business. &lt;br&gt;&lt;br&gt;5) Keep in mind that we tune the collector for more and more scenarios over time so you can expect it to be stable under an increasingly wider variety of situations with each release. When adopting a new version of the platform you should reconsider your previous uses of GC.Collect() for your next release. There may be more cases where the collector is doing the right thing automatically.&lt;br&gt;&lt;br&gt;In summary, GC.Collect should be an episodic thing (i.e. some major event just occurred) not a cyclical thing. If your normal processing is such that a GC.Collect is necessary to get decent memory usage that's a very bad sign -- you are likely to get awful performance. Find a way to have more collector-friendly object lifetimes (see links above for some ideas) &lt;br&gt;</description></item><item><title>Some fun on GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272585</link><pubDate>Wed, 01 Dec 2004 01:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272585</guid><dc:creator>Brad Abrams </dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272604</link><pubDate>Tue, 30 Nov 2004 23:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272604</guid><dc:creator>Jeff Lewis</dc:creator><description>Great post.  </description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272606</link><pubDate>Tue, 30 Nov 2004 23:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272606</guid><dc:creator>Matt</dc:creator><description>A question...&lt;br&gt;When is the GC called by the system?&lt;br&gt;If I remember the .NET memory model, all it is is a pointer to the top of the stack (or heap, I always mix the two up...) which is incremented for new objects being created.  The GC is called when the pointer reaches the top of available memory, right?&lt;br&gt;Are there any other specific instances when I can count on it being run?</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272740</link><pubDate>Wed, 01 Dec 2004 05:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272740</guid><dc:creator>Matthew Wills</dc:creator><description>Hector,&lt;br&gt;&lt;br&gt;&amp;lt;quote&amp;gt;&lt;br&gt;Using Excel via InterOp seems to fit in this category. I've run into places where Excel will not quit unless you explicitly do GC.Collect() like described in this MS knowledge base article &lt;br&gt;&amp;lt;/quote&amp;gt;&lt;br&gt;&lt;br&gt;If you actually read the article, you will see that it doesn't recommend using GC.Collect. That is merely a last ditch solution if you can't work out how to do it properly using ReleaseCOMObject).&lt;br&gt;&lt;br&gt;If you ReleaseCOMObject *everything*, GC.Collect is unnecessary when dealing with Excel.</description></item><item><title>Garbage Collector, GC.Collect e Dispose</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272799</link><pubDate>Wed, 01 Dec 2004 11:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272799</guid><dc:creator>Marco Russo</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272817</link><pubDate>Wed, 01 Dec 2004 09:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272817</guid><dc:creator>Ole Thrane</dc:creator><description>We have also experienced a lot of GC related problems. Usually in connection with the ASP.NET Cache object.&lt;br&gt;The problem is that putting lots of objects into the Cache (within a short time) will eventually cause an OutOfMemoryException in the ASP.NET process.&lt;br&gt;We have concluded that even though the Cache sheds the objects under memory pressure, the GC may not run soon enough after that to avoid the OutOfMemoryException (as new objects are still being created).&lt;br&gt;We have not been able to find a solution for this problem. Calling GC.Collect periodically helps a lot in avoiding exceptions, but hurts performance (a lot!).&lt;br&gt;I guess that the problem is related the the 'mid-life crisis' described above, but in this case it is the Cache that causes the crisis, so what can we do?&lt;br&gt;In my opinion, it should be possible to tell the GC when an object is no longer needed. This way the cache could inform the GC of all the objects it sheds. The GC would then know to clean these up even if they had been promoted to gen. 2.&lt;br&gt;I really hope that all this will be better in (ASP).Net 2.0.</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272844</link><pubDate>Wed, 01 Dec 2004 11:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272844</guid><dc:creator>Denis Sakarov</dc:creator><description>&lt;br&gt;&amp;gt;Except minimising means they've moved onto &lt;br&gt;&amp;gt;something else, &lt;br&gt;&amp;gt;and on a constrained system &lt;br&gt;&amp;gt;you've just forced the GC to hard fault page &lt;br&gt;&amp;gt;after page while it collects. &lt;br&gt;&lt;br&gt;Not necessarly, but it's also good practice to try to determine whether the user is idle (after minimization) in your decision to force a GC. This can easily be baked into the system's GC policies.&lt;br&gt;&lt;br&gt;</description></item><item><title>Nunca se deve chamar o GC.Collect?</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#272856</link><pubDate>Wed, 01 Dec 2004 15:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272856</guid><dc:creator>Programando .NET</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#273002</link><pubDate>Wed, 01 Dec 2004 14:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:273002</guid><dc:creator>Ian Griffiths</dc:creator><description>Darren, were you actually remembering to close the files you opened?</description></item><item><title>GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#274024</link><pubDate>Fri, 03 Dec 2004 02:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:274024</guid><dc:creator>BlackDog Weblog</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#274238</link><pubDate>Fri, 03 Dec 2004 11:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:274238</guid><dc:creator>Sherif</dc:creator><description>I can't agree more that calling GC.Collect is harmful in many cases, but how do I act if I see GC not working as expected. I have a problem that I tried to solve with calling GC.Collect() and the result was making the problem worse.&lt;br&gt;My ASP.NET application keeps leaking memory until the worker process gets recycled (2-3 times a day).&lt;br&gt;I looked at the performance counter and found that Gen 0,1,2 and large heap sizes are 98MB, 7MB, 130MB and 1MB respectively. While the number of Gen 0, 1 and 2 collections 157, 76 and 10. The percentage of time in GC was 0.032%. The statistics were after 28000 requests. As you can see, the number of garbage collections is very low. So I put a GC.Collect() call at the EndRequest event handler. The result was that Gen 0 heap size was 1MB down from 130MB, but the % of time in GC was 99.6%. So GC.Collect() made the problem worse, so I removed it but my problem still exists.</description></item><item><title>GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#278701</link><pubDate>Thu, 09 Dec 2004 07:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:278701</guid><dc:creator>BlackDog Weblog</dc:creator><description /></item><item><title>What's wrong with this code #4 - discussion...</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#278736</link><pubDate>Thu, 09 Dec 2004 08:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:278736</guid><dc:creator>Eric Gunnerson's C# Compendium</dc:creator><description /></item><item><title>The Memory Reclamation Phase</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#279030</link><pubDate>Thu, 09 Dec 2004 21:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:279030</guid><dc:creator>Bruce Johnson's SOA(P) Box</dc:creator><description /></item><item><title>Tracking down managed memory leaks (how to find a GC leak)</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#279614</link><pubDate>Fri, 10 Dec 2004 21:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:279614</guid><dc:creator>Rico Mariani's Performance Tidbits</dc:creator><description /></item><item><title>Tracking down managed memory leaks (how to find a GC leak) (from: Rico Mariani)</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#280123</link><pubDate>Sun, 12 Dec 2004 07:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:280123</guid><dc:creator>TOURNEY LOGIC LINK BLOG</dc:creator><description /></item><item><title>.net Garbage Collector Tips and Tricks</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#323173</link><pubDate>Fri, 17 Dec 2004 06:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:323173</guid><dc:creator>Tony's Blog</dc:creator><description /></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#329891</link><pubDate>Wed, 22 Dec 2004 15:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:329891</guid><dc:creator>RichB</dc:creator><description>Rico, is the same logic true for WaitForPendingFinalizers() as Collect() ?</description></item><item><title>re: When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#331532</link><pubDate>Fri, 24 Dec 2004 01:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:331532</guid><dc:creator>Rico Mariani</dc:creator><description>Probably more so Rich -- after all it doesn't make a whole lot of sense to call WaitForPendingFinalizers unless you just forced a collection.&lt;br&gt;&lt;br&gt;So if you forced a collection for the reasons above and you expect (i.e. have measured) finalizable objects then it might be useful.  But even then it's of limited usefulness unless you need to synchronize your thread with the release of those objects for some exotic reason.&lt;br&gt;&lt;br&gt;I suspect that (by far) the most common reason is for reporting available memory accurately.</description></item><item><title>.net Garbage Collector Tips and Tricks</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#333068</link><pubDate>Tue, 28 Dec 2004 05:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:333068</guid><dc:creator>Tony's Blog</dc:creator><description /></item><item><title>When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#406087</link><pubDate>Thu, 07 Apr 2005 08:09:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:406087</guid><dc:creator>string szFriend = </dc:creator><description /></item><item><title>When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#406088</link><pubDate>Thu, 07 Apr 2005 08:09:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:406088</guid><dc:creator>string szFriend = </dc:creator><description /></item><item><title>Optimizacao de codigo Win32 e Managed</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#417158</link><pubDate>Fri, 13 May 2005 14:05:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:417158</guid><dc:creator>Programando .NET</dc:creator><description /></item><item><title>Memory and Performance in .NET</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#612947</link><pubDate>Thu, 01 Jun 2006 16:51:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:612947</guid><dc:creator>briandela</dc:creator><description /></item><item><title>Rico's Talk from Gamefest</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#725551</link><pubDate>Sat, 26 Aug 2006 20:51:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:725551</guid><dc:creator>XNA Diaries</dc:creator><description>While the slides and recordings from Gamefest are not yet available on the&amp;amp;amp;nbsp;conference website, Rico...</description></item><item><title>Deterministic Finalization in Garbage-Collected Languages (Post 1 of 5) by sengelha () | LjSEEK.COM</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#746088</link><pubDate>Fri, 08 Sep 2006 13:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:746088</guid><dc:creator>Deterministic Finalization in Garbage-Collected Languages (Post 1 of 5) by sengelha () | LjSEEK.COM</dc:creator><description>PingBack from &lt;a rel="nofollow" target="_new" href="http://www.ljseek.com/deterministic-finalization-in-garbage-collected-languages_13761073.html"&gt;http://www.ljseek.com/deterministic-finalization-in-garbage-collected-languages_13761073.html&lt;/a&gt;</description></item><item><title>Web 2.0  &amp;raquo; Blog Archives   &amp;raquo; Rico Mariani&amp;#8217;s Performance Tidbits : When to call GC.Collect()</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#968343</link><pubDate>Sun, 05 Nov 2006 06:49:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:968343</guid><dc:creator>Web 2.0  » Blog Archives   » Rico Mariani’s Performance Tidbits : When to call GC.Collect()</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://chaespot.com/web2.0/2006/11/05/rico-marianis-performance-tidbits-when-to-call-gccollect/"&gt;http://chaespot.com/web2.0/2006/11/05/rico-marianis-performance-tidbits-when-to-call-gccollect/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Memory leaks 101: Objects anchored by event generators</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#1440080</link><pubDate>Tue, 09 Jan 2007 22:20:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1440080</guid><dc:creator>Rico Mariani's Performance Tidbits</dc:creator><description>&lt;p&gt;This problem actually comes up pretty often so I thought I'd write a little article about it, and a couple&lt;/p&gt;
</description></item><item><title>New In Orcas Part 2: GC Collection Modes</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#1838208</link><pubDate>Thu, 08 Mar 2007 21:08:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1838208</guid><dc:creator>Chris Lyon's WebLog</dc:creator><description>&lt;p&gt;In Orcas we’ve added an overload to System.GC.Collect(): void System.GC.Collect(int generation, System.GCCollectionMode&lt;/p&gt;
</description></item><item><title>Web 2.0  &amp;raquo; Blog Archives   &amp;raquo; Nonius Collect: Datacollection experiment</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#1924474</link><pubDate>Wed, 21 Mar 2007 12:12:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1924474</guid><dc:creator>Web 2.0  » Blog Archives   » Nonius Collect: Datacollection experiment</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://chaespot.com/web2.0/2007/03/21/nonius-collect-datacollection-experiment/"&gt;http://chaespot.com/web2.0/2007/03/21/nonius-collect-datacollection-experiment/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>In den Tiefen des .NET Frameworks – Der Garbage Collector</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#2950619</link><pubDate>Mon, 28 May 2007 23:08:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2950619</guid><dc:creator>&lt;dw:daniel_walzenbach runat="server" /&gt;</dc:creator><description>&lt;p&gt;Bei Microsoft zu arbeiten ist Himmel und H&amp;#246;lle zugleich! T&amp;#228;glich finden sich tausende interessante Dinge&lt;/p&gt;
</description></item><item><title>Web 2.0  &amp;raquo; Blog Archives   &amp;raquo; NEO Binaries: Your ultimate resource for New Age</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#3920313</link><pubDate>Tue, 17 Jul 2007 20:36:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3920313</guid><dc:creator>Web 2.0  » Blog Archives   » NEO Binaries: Your ultimate resource for New Age</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://chaespot.com/web2.0/2007/07/17/neo-binaries-your-ultimate-resource-for-new-age/"&gt;http://chaespot.com/web2.0/2007/07/17/neo-binaries-your-ultimate-resource-for-new-age/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>  When to call GC.collect : iCode IT</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#4517650</link><pubDate>Thu, 23 Aug 2007 03:29:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4517650</guid><dc:creator>  When to call GC.collect : iCode IT</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://icodeinc.com/blog/?p=26"&gt;http://icodeinc.com/blog/?p=26&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Web 2.0  &amp;raquo; Blog Archives   &amp;raquo; EVERYTHING 2.0: 30 July 2006</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#4522361</link><pubDate>Thu, 23 Aug 2007 11:32:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4522361</guid><dc:creator>Web 2.0  » Blog Archives   » EVERYTHING 2.0: 30 July 2006</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://chaespot.com/web2.0/2007/08/23/everything-20-30-july-2006/"&gt;http://chaespot.com/web2.0/2007/08/23/everything-20-30-july-2006/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>.NET 3.5 changes to GC.Collect</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#4575553</link><pubDate>Sun, 26 Aug 2007 18:27:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4575553</guid><dc:creator>Scott Dorman</dc:creator><description>&lt;p&gt;.NET 3.5 changes to GC.Collect&lt;/p&gt;
</description></item><item><title>Business &amp;raquo; Rico Mariani&amp;#8217;s Performance Tidbits : Taming the CLR: How to Write Real &amp;#8230;</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8263434</link><pubDate>Sun, 16 Mar 2008 19:22:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8263434</guid><dc:creator>Business » Rico Mariani’s Performance Tidbits : Taming the CLR: How to Write Real …</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://businessethicsarticleblog.info/rico-marianis-performance-tidbits-taming-the-clr-how-to-write-real/"&gt;http://businessethicsarticleblog.info/rico-marianis-performance-tidbits-taming-the-clr-how-to-write-real/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>TODELETE</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8621164</link><pubDate>Thu, 19 Jun 2008 13:27:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8621164</guid><dc:creator>Patrick Smacchia [MVP C#]</dc:creator><description>&lt;p&gt;NDepend v2.9 comes with a set of default CQL rules concerning usage guidelines of the .NET Framework&lt;/p&gt;
</description></item><item><title>Rules on .NET Framework Usage</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8621166</link><pubDate>Thu, 19 Jun 2008 13:27:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8621166</guid><dc:creator>Patrick Smacchia [MVP C#]</dc:creator><description>&lt;p&gt;NDepend v2.9 comes with a set of default CQL rules concerning usage guidelines of the .NET Framework&lt;/p&gt;
</description></item><item><title>Rules on .NET Framework Usage</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8621235</link><pubDate>Thu, 19 Jun 2008 13:49:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8621235</guid><dc:creator>Community Blogs</dc:creator><description>&lt;p&gt;NDepend v2.9 comes with a set of default CQL rules concerning usage guidelines of the .NET Framework&lt;/p&gt;
</description></item><item><title>Using the System.GC APIs to Improve Performance</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8877531</link><pubDate>Tue, 19 Aug 2008 03:35:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8877531</guid><dc:creator>CLR and Framework Perf  Blog</dc:creator><description>&lt;p&gt;Chris Lyon here. You may remember me from such blogs as How I Learned to Stop Worrying and Love the GC&lt;/p&gt;
</description></item><item><title>Using the System.GC APIs to Improve Performance at TEST</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8946104</link><pubDate>Fri, 12 Sep 2008 12:43:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8946104</guid><dc:creator>Using the System.GC APIs to Improve Performance at TEST</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-3/"&gt;http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-3/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Using the System.GC APIs to Improve Performance at TEST</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8946110</link><pubDate>Fri, 12 Sep 2008 12:46:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8946110</guid><dc:creator>Using the System.GC APIs to Improve Performance at TEST</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-5/"&gt;http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-5/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Using the System.GC APIs to Improve Performance at TEST</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8946113</link><pubDate>Fri, 12 Sep 2008 12:48:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8946113</guid><dc:creator>Using the System.GC APIs to Improve Performance at TEST</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-7/"&gt;http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-7/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Using the System.GC APIs to Improve Performance at TEST</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#8946115</link><pubDate>Fri, 12 Sep 2008 12:50:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8946115</guid><dc:creator>Using the System.GC APIs to Improve Performance at TEST</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-9/"&gt;http://mavericksoftwares.com/blog/index.php/2008/08/19/using-the-systemgc-apis-to-improve-performance-9/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>C# and GC.Collect() | Pete Ware</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#9375056</link><pubDate>Sun, 25 Jan 2009 19:18:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9375056</guid><dc:creator>C# and GC.Collect() | Pete Ware</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://www.peteware.com/blog/2008/03/c-and-gccollect/"&gt;http://www.peteware.com/blog/2008/03/c-and-gccollect/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Forcing a Garbage Collection is not a good idea</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#9424276</link><pubDate>Sun, 15 Feb 2009 16:28:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9424276</guid><dc:creator>I know the answer (it's 42)</dc:creator><description>&lt;p&gt;&amp;amp;#160; Someone asked on a DL about when to force a GC using GC.Collect. This has been answered by many&lt;/p&gt;
</description></item><item><title>Porting C++ native code to managed (/clr) - Threads</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#9441379</link><pubDate>Mon, 23 Feb 2009 17:34:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9441379</guid><dc:creator>Developer Support Visual C++ and C#</dc:creator><description>&lt;p&gt;In native world, one interacts with OS directly by calling Win32 APIs for managing resources (like allocating/deallocating&lt;/p&gt;
</description></item><item><title>
	Rezumatul evenimentelor pentru dezvoltatori | Februarie 2009 - Stay hungry ... stay foolish ... stay funny :)
</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#9467795</link><pubDate>Mon, 09 Mar 2009 17:26:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9467795</guid><dc:creator>
	Rezumatul evenimentelor pentru dezvoltatori | Februarie 2009 - Stay hungry ... stay foolish ... stay funny :)
</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://ronua.ro/CS/blogs/petru/archive/2009/03/09/rezumatul-evenimentelor-pentru-dezvoltatori-februarie-2009.aspx"&gt;http://ronua.ro/CS/blogs/petru/archive/2009/03/09/rezumatul-evenimentelor-pentru-dezvoltatori-februarie-2009.aspx&lt;/a&gt;&lt;/p&gt;
</description></item><item><title> Rico Mariani s Performance Tidbits When to call GC Collect | Shed Kits</title><link>http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx#9643433</link><pubDate>Wed, 27 May 2009 07:28:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9643433</guid><dc:creator> Rico Mariani s Performance Tidbits When to call GC Collect | Shed Kits</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://backyardshed.info/story.php?title=rico-mariani-s-performance-tidbits-when-to-call-gc-collect"&gt;http://backyardshed.info/story.php?title=rico-mariani-s-performance-tidbits-when-to-call-gc-collect&lt;/a&gt;&lt;/p&gt;
</description></item></channel></rss>