Dom*_*Eav 10 .net c# performance profiling garbage-collection
在分析我的应用程序(C#,.NET 4)时,我注意到我使用的第三方库显式调用GC.Collect().这非常令人讨厌,因为它有时会对我的应用程序性能产生巨大影响,因为对这个库的一些调用最终会产生巨大的循环:在GC.Collect中花费的时间占总执行时间的80%以上.
当然,我向库维护者报告了这种行为(lib不是开源的),但是当他们正在开发新版本时,我想优化我的应用程序.我能做什么?
我尝试通过将GCSettings.LatencyMode设置为GCLatencyMode.LowLatency来配置GC(当然,仅在执行库调用期间),但无济于事.我宁愿避免分叉我的过程.
有任何想法吗?
您可以采取两条道路,第一条是自己修补,第二条是通知图书馆的开发者(提交错误报告).
自己修补相当容易,将RedGates Reflector与Reflexil AddIn一起使用并修补库.你也可以得到DotNet IL编辑器,它基本上做同样的事情,但是是FLOSS.
"自己修补"方法的问题在于它有缺点:
GC.Collect()并且只有其中一个是合法的(我怀疑它,但可能是),您将通过删除所有这些来破坏库.您可以做的另一件事是向库的原始开发人员提交错误.确保您不会沾沾自喜,而是提供有用的资源,例如GC上的MSDN文章和测试应用程序以及显示问题的分析器的结果.
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |