如何判断.Net 3.5垃圾收集器是否已运行?

Alm*_*lmo 2 .net c# garbage-collection

我有一个创建节点树的应用程序,然后抛出它们并创建新树.

应用程序在启动时分配大约20 MB.但我尝试多次加载大型节点文件,分配的内存超过700 MB.我以为我会看到垃圾收集器有时会释放内存.

我所使用的机器有12 GB的RAM,所以可能只是分配了这么小的内存量并不重要.

我已经找到了很多关于GC如何工作的好信息,并且最好不要告诉它该做什么.但是我想验证它实际上正在做什么,并且我不会在代码中做错某事阻止我的对象被清除.

Bri*_*sen 7

GC通常在以下任一情况发生时运行:

  • 你调用GC.Collect(你不应该)
  • Gen0的预算已经用完了

还有其他一些场景,但我现在暂时不会这样做.

您没有告诉我们您如何测量内存使用情况,但如果您正在查看进程本身的内存使用情况(例如通过任务管理器),那么您可能看不到您期望的数字.请记住,.NET运行时本质上有自己的内存管理器,可以代表您管理的应用程序处理内存使用情况.运行时尝试对它很聪明,因此它不会一直为操作系统分配和释放内存(这些操作很昂贵).这个问题也可能是相关的.

如果你担心内存泄漏,请看一下这里的一些答案.