Garbage Collector in NAV 2009

Today I learned one new thing:

Garbage collector in NAV 2009 is set to DISABLED by default. Do not ask me what does it mean and why it is disabled. I do not know. Regardless the value DISABLED, this settings just means that Workstation mode is used for GC. Microsoft NAV team have learned, that by enabling it, you can speed up the NAV Server! Are you asking how you can enable it? It is easy, you need only to add this into the Microsoft.Dynamics.NAV.Server.exe.config file:

      <gcServer enabled=”true”/>

It is standard Dot.NET config parameter. What I have noticed when I just googled this parameter, that it could (and probably would) raise memory consumption of the process. Of course, because if I understand it correctly, it will not release the memory of created object immediately, after the object is not used anymore, but only when the GC is started (e.g. there is no enough free memory or max time between runs was hit). But this “not releasing” leads to better performance. But, again, this is just my understanding of the problem. I can be wrong. Based on the comment from Per, the difference is, that Server GC will be used instead workstation GC, which means separate threads on highest priority for the GC, instead running GC in context of user thread. And this means using all available CPU cores etc. and this leads to better performance when doing GC, because during GC run the threads are suspended. But still, that the performance is better, is true.

Please, post into comments your experience with this setting.

I want to thank to Michael Nielsen for this info…


(Edited 7:08 CET 25.4.2012)

One thought on “Garbage Collector in NAV 2009”

  1. It is not that garbage collection is disabled by default. I don’t think that’s even possible. It is a matter of whether Workstation or Server garbage collection is used. In (very) short, the rule of thumb is that the option you list can improve performance if your box has more than two CPUs.

    Memory is never freed immediately after all references to a memory block goes out of scope. No matter the GC mode. The reason Server garbage collection is better for an NAV server has something to do with the thread orchestration. If you’re interested you can read more at:

    Nonetheless, it would indeed be interesting to hear about experiences.

Leave a Reply

Your email address will not be published. Required fields are marked *