c#中GC的使用以及如何跟踪内存泄漏

本文关键字:何跟踪 跟踪 泄漏 内存 GC | 更新日期: 2023-09-27 17:52:11

我有一个大型的c#服务器应用程序,我有兴趣了解GC类是如何工作的,特别是我应该采取什么行动来确定可能的内存泄漏的来源。

有关于这个主题的书吗,还是真的没有那么详细?

c#中GC的使用以及如何跟踪内存泄漏

你可以学习很多资源。

我希望你不要错过基础知识:

  • CLR via c# 3rd Edition

我认为在你详细介绍GC之前,试着理解IDisposable和资源管理是如何处理的:

  • 处置、终结和资源管理。它很旧,但仍然很棒。

GC具体:

  • 垃圾收集/垃圾收集基本原理
  • Maoni Stephens是一名软件开发人员,她致力于实现。net的GC。事实上,她从。net早期就开始研究GC了。)
  • 视频:Maoni Stephens和Andrew Pardoe: CLR 4垃圾收集器-内部背景GC
  • 视频:Erik Meijer和Patrick Dussud - Inside Garbage Collection
  • 深入。net框架内部查看CLR如何创建运行时对象
  • 识别和防止托管代码中的内存泄漏

不是一本书,但是我们的团队已经非常成功地使用了ANTS Memory Profiler来跟踪托管内存泄漏。他们的支持部分和附带的帮助引导您完成跟踪不同类型内存问题的过程。这并不包括GC类本身的细节,只包括如何跟踪常见错误(事件处理程序注销、静态变量等)。

也不是一本书,而是一篇像样的文章。.NET中的内存泄漏检测

Rico Mariani写了一篇很好的文章:跟踪托管内存泄漏(如何找到GC泄漏)。我经常使用这种方法,它既简单又有效。让自己熟悉像Windbg这样的真正的调试器是一个额外的好处!

还有一个SciTech . net内存分析器,我们的团队已经成功地使用了它。

作为对上述答案的补充,在Channel9上还有Maoni Stephens(微软CLR团队中GC的主要开发人员)的最新视频,这些视频带您了解GC的基础知识,开发人员应该注意什么,他们应该如何排除故障,以及您可以使用的一些工具。我发现对GC如何工作的解释以及代和根的概念非常有用。

这是一个3集系列的第一部分:

http://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-33-CLR-GC-Part-1