4
|
willeM_ Van Onsem · 技术社区 · 14 年前 |
![]() |
1
4
windbg+sos可以帮助理解这一点。但这需要时间来学习。例如, Where's your leak at? [Using WinDbg, SOS, and GCRoot to diagnose a .NET memory leak] |
![]() |
2
4
清除发生由系统控制,如果内存分配足够小,并且系统认为不需要清除,则不会调用析构函数。 这不是生产的最佳实践,但您可以通过gc.collect()强制gc仅在测试时使用它。如果你的析构函数没有被调用,那么可能会有一个泄漏。 我不知道Mono环境中的profiler,但是 this profiler 在窗户里就够好了。 |
![]() |
3
3
.NET垃圾收集器将自动清理(释放)不再被引用的对象。但是,对于程序来说,拥有静态字段、未移动的事件处理程序或其他引用的情况并不少见,这些静态字段、未移动的事件处理程序或其他引用会使对象保持活动状态(并使用内存)的时间比严格需要的时间长。 要解决这个问题,请使用一个内存分析器,它将识别保存对象的“根”,找出它们仍然被引用的原因,并修复导致对象仍然被引用的错误。 一些商用和免费内存配置文件包括: |
![]() |
4
2
解除资源分配需要资源。如果垃圾收集器没有检测到正在使用的内存太多,它将不会释放其资源。如果需要确定性“析构函数”,请实现IDisposable。也见 "using" keyword |
![]() |
codeforester · 测量GC暂停时间的最佳方法是什么? 7 年前 |
![]() |
Venki WAR · 需要解释G1的并行完整GC 7 年前 |
![]() |
Stephan_Berlin · 为什么CMS系列中的初始标记阶段 7 年前 |
![]() |
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 7 年前 |
![]() |
goks · 如何清除熊猫的数据帧内存? 7 年前 |