【问题标题】:Why there is a huge difference between GC.GetTotalMemory() and CLR Profiler numbers?为什么 GC.GetTotalMemory() 和 CLR Profiler 数字之间存在巨大差异?
【发布时间】:2011-06-12 05:52:14
【问题描述】:

我有一个对象,我需要为 IIS 中的 Web 应用程序缓存其中的几个,因此我正在分析每个实例使用多少内存。

我写了一个小的exe,我在构造之前和之后调用GC.GetTotalMemory(true),差异在335k左右,但如果在CLR profiler中分析它显示我使用了22 MB的内存对于没有意义的对象。

我在 CLR 分析器中错误解释了什么?
我应该在哪里检查分析器以查看单个对象的大小?

【问题讨论】:

  • CLR Profile 物有所值。不要在这上面浪费你的时间,除非你的时间也是空闲的。
  • 你只做了一个实例吗?如果你制作多个实例怎么办?我猜(但这是一个疯狂的猜测)22MB 将保持稳定,直到您创建足够的实例来填满它(所以在 65 个左右的对象之后它可能会跳到 44Mb)?

标签: c# memory object size profiler


【解决方案1】:

根据 MSDN:垃圾收集器不保证收集所有不可访问的内存。

look here

CLR profiler 显示所有分配的内存;

如果你使用 GC.GetTotalMemory(false) 结果是什么?

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 2015-08-29
    • 2015-12-25
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2021-09-23
    相关资源
    最近更新 更多