【发布时间】:2011-07-15 02:39:09
【问题描述】:
在分析我的应用程序(C#、.NET 4)时,我注意到我正在使用的第三方库显式调用 GC.Collect()。这很烦人,因为它有时会对我的应用程序性能产生巨大影响,因为对该库的一些调用最终会陷入巨大的循环:在 GC.Collect 中花费的时间占总执行时间的 80% 以上。
当然,我向库维护者报告了这种行为(该库不是开源的),但是当他们正在开发新版本时,我想优化我的应用程序。我能做什么?
我尝试通过将 GCSettings.LatencyMode 设置为 GCLatencyMode.LowLatency 来配置 GC(当然,仅在执行库调用期间),但无济于事。我宁愿避免分叉我的进程。
有什么想法吗?
【问题讨论】:
-
我很确定答案是“没有”。毕竟, GC.Collect 是执行垃圾收集的显式请求;我想不出一种“覆盖”请求或显着降低其影响的方法。我很想知道最初的开发人员认为他们将 GC.Collect 调用放入他们的库中做了什么!
-
与他们联系时避免表现得太好。
-
@Rob Levin:他们可能认为
It's a good idea to perform a Garbage Collection here to free up resources。当我开始使用 .NET 时,我也有过这样的想法……好吧,不用说,在那个伟大的想法之后的两个小时,我通过阅读为什么性能来了解为什么我不应该弄乱框架的 GC我的申请突然变得那么糟糕。
标签: c# .net performance garbage-collection profiling