C#内存使用情况

jak*_*aks 14 c#

我如何获得C#应用程序中使用的实际内存?

  • 任务管理器显示不同的指标
  • Process Explorer显示专用字节的使用增加.
  • 性能计数器(perfmon.msc)显示不同的指标
  • 当我使用.NET内存分析器时,它显示大部分内存是垃圾收集的,只有很少的Live字节.

我不知道该相信哪一个.

Bri*_*sen 11

内存使用比显示一两个数字要复杂一些.我建议你看一下Mark Russinovich关于Windows中各种计数器的优秀帖子.

.NET只会使问题进一步复杂化..NET进程只是另一个Windows进程,因此很明显它将具有所有常规指标,但除此之外,CLR还充当托管应用程序的内存管理器.因此,根据观点,这些数字会有所不同.

CLR代表.NET应用程序有效地分配和释放大块的虚拟内存,然后根据需要将内存位分配给应用程序.因此,虽然您的应用程序可能在给定时间点使用非常少的内存,但此内存可能已经或可能未被释放到操作系统.

最重要的是CLR本身使用内存来加载IL,将IL编译为本机代码,存储所有类型信息等等.所有这些都增加了该过程的内存占用.

如果您想知道托管应用程序用于数据的内存量,则所有堆计数器中的字节数都很有用.专用字节可以用作应用程序在进程级别上的内存使用量的粗略估计.

您可能还想查看以下相关问题:

减少.NET应用程序的内存使用量?

如何检测内存泄漏的位置?