gpt4 book ai didi

.NET 垃圾收集 (GC) 调整

转载 作者:行者123 更新时间:2023-12-05 01:48:55 26 4
gpt4 key购买 nike

我遇到 GC 来不及删除空闲对象的情况。该代码将一个大文档加载到内存中并循环处理它。如果我在此循环中停止(在 Debug模式下)或添加 GC.Collect(),内存使用量将下降到 70 MB 以下。

如何调整 GC?是否有优化 GC 的最佳实践?

最佳答案

首先,您需要探索程序运行时垃圾收集器内部发生的情况。通常垃圾收集器擅长决定何时在没有您干预的情况下删除对象。但是,它不容易出错。例如,您可能保留了一个小对象列表,这些小对象包含对您希望很快消亡的大对象的引用。要了解 GC 中的瓶颈,您需要分析 GC 内存分配。要做到这一点...

1)在windows开始搜索“performance monitor”

2) 在监视工具选项卡下选择性能监视器。通过“右键单击-> 删除所有计数器”清除您已有的任何计数器

3)右击->添加计数器

4) 选择“.NET CLR memory”下的所有计数器。添加它们时,请确保启动程序并从左侧列表中选择程序。这将确保您的计数器将报告您的程序的性能,而不是其他任何内容

5) 运行计数器后,请阅读以下文章以找出程序中的瓶颈。

垃圾收集器基础知识 http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

性能监视器计数器告诉您什么 http://msdn.microsoft.com/en-us/library/x2tyfybc.aspxhttp://netrsc.blogspot.com.es/2008/01/net-clr-memory-performance-monitoring.html

一旦您熟悉了基础知识,请寻找以下问题1) 大对象堆碎片太快

2) 您想快速消亡的对象最终会出现在第 2 代中例如。中年危机http://blogs.msdn.com/b/ricom/archive/2003/12/04/41281.aspx

3) 总提交字节不断增加

4) 你花太多时间在垃圾收集上

5) 以及更多...(谷歌搜索 GC 内存问题)

由于您无法识别哪些对象存在于不同的世代中,您可以使用类似 ANST 内存配置文件的工具来查看您是否无意中将短期对象提升到第 2 代。分析器允许您查看谁持有对大对象的引用以及峰值进入不同的垃圾收集器存储(例如,生活在第 2 代的人生活在大型对象堆中)。但在进行任何高级性能调整之前,请使用 Windows 性能监视器来确定您的瓶颈是否实际上与 GC 有关。

关于.NET 垃圾收集 (GC) 调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628512/

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