gpt4 book ai didi

c# - 第三方库中麻烦的 GC.collect() 调用

转载 作者:可可西里 更新时间:2023-11-01 09:08:24 29 4
gpt4 key购买 nike

在分析我的应用程序(C#、.NET 4)时,我注意到我正在使用的第三方库显式调用了 GC.Collect()。这非常烦人,因为它有时会对我的应用程序性能产生巨大影响,因为对该库的一些调用最终会陷入巨大的循环:花在 GC.Collect 上的时间占总执行时间的 80% 以上。

当然,我向库维护者报告了这种行为(库不是开源的),但是当他们正在开发新版本时,我想优化我的应用程序。我能做什么?

我尝试通过将 GCSettings.LatencyMode 设置为 GCLatencyMode.LowLatency 来配置 GC(当然,仅在执行库调用期间),但无济于事。我宁愿避免 fork 我的过程。

有什么想法吗?

最佳答案

有两条路可以走,第一条是自己修补,第二条是通知库的开发人员(提交错误报告)。

自己打补丁很容易,获取RedGates Reflector连同 Reflexil AddIn并修补库。您还可以获得 DotNet IL Editor ,它基本上做同样的事情,但是是 FLOSS。

“自己修补”方法的问题在于它有缺点:

  • 库的 future 版本也需要修补。所以你最好记录下你所做的事情。
  • 您不了解库的内部结构,如果有 10 次调用 GC.Collect() 而其中只有一次是合法的(我对此表示怀疑,但可能是),您我会通过删除所有这些来破坏库。
  • 您很可能会违反图书馆的许可证,这会让您陷入法律困境。但这取决于您如何使用库、在什么软件中以及最终包的分发方式。

您可以做的另一件事是向库的原始开发人员提交错误。确保您没有沾沾自喜,而是提供有用的资源,例如关于 GC 的 MSDN 文章和测试应用程序以及显示问题的探查器结果。

关于c# - 第三方库中麻烦的 GC.collect() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300616/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com