加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:09:13 所属栏目:百科 来源:网络整理
导读:在分析我的应用程序(C#,.NET 4)时,我注意到我正在使用显式调用GC.Collect()的第三方库.这是非常烦人的,因为它有时会对我的应用程序性能产生巨大的影响,因为对这个库的一些调用最终会出现巨大的循环:在GC.Collect帐户中花费的时间超过总执行时间的80%. 当然
在分析我的应用程序(C#,.NET 4)时,我注意到我正在使用显式调用GC.Collect()的第三方库.这是非常烦人的,因为它有时会对我的应用程序性能产生巨大的影响,因为对这个库的一些调用最终会出现巨大的循环:在GC.Collect帐户中花费的时间超过总执行时间的80%.

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

我试图通过将GCSettings.LatencyMode设置为GCLatencyMode.LowLatency来配置GC(当然这只是在执行库调用期间),但是无效.我宁愿避免我的过程.

有任何想法吗?

解决方法

有两条路可以采取,首先是自己修补,第二个是通知图书馆的开发者(提交错误报告).

自己修补是很容易的,得到RedGates Reflector与Reflexil AddIn和补丁库.你也可以得到DotNet IL Editor,这基本上是一样的,但是FLOSS.

“补丁自己”的方法的问题是它有缺点:

>未来版本的库也需要修补.所以你最好记录你做了什么.
>你不明白图书馆的内部,如果有10个呼叫GC.Collect(),只有其中一个是合法的(我怀疑,但可能),你会破坏库,删除所有的.
>你很可能违反图书馆的许可证,这可能会让你陷入合法的地狱.但这取决于您如何使用库,以及使用哪种软件以及最终包的分发方式.

您可以做的另一件事是向图书馆的原始开发人员提出错误.确保您没有嗅到它,而是提供有用的资源,如GC上的MSDN文章和测试应用程序以及显示问题的分析器的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读