【问题标题】:How to determine how much memory is consumed by MemoryCache Class?如何确定 MemoryCache 类消耗了多少内存?
【发布时间】:2013-10-31 14:17:51
【问题描述】:

我们的产品基于内存中的对象数据集,该数据集保存在 MemoryCache 对象中。

我想知道缓存中存储的数据消耗了多少内存。

因为我们可能在同一台机器上运行产品的多个实例 (每个都在它自己的应用程序域中),立即查看谁在消费什么是很重要的......

该类具有以下属性:CacheMemoryLimit 和 PhysicalMemoryLimit,但没有属性可以让我知道消耗了多少内存?

提前致谢!

【问题讨论】:

  • GetCount() * Marshal.SizeOf(your type) 怎么样
  • 在我的对象列表上执行此操作,我收到一个错误:“ - 不能作为非托管结构封送;无法计算有意义的大小或偏移量。”
  • 我明白了——看来你只能得到某些类型的大小。
  • 您可以使用支持 SOS.dll 的调试器来执行此操作。

标签: c# caching memorycache


【解决方案1】:

检查内存的最佳方法是使用 WinDbg + SOS/Psscor。特别是,来自 Tess 的this article 将为您提供一个脚本来自动执行 MemoryCache 检查。

但是,如果您不熟悉这些工具和 .net 内部结构,通常需要花费几个小时来设置环境并了解其工作原理。

另一种方法是使用调试工具 2.0,可用here。您只需要创建工作进程的内存转储(任务管理器/右键单击/创建转储文件)并选择内存分析。该报告包含一个部分进程中的 Web 缓存大小

如果您想进行实时内存检查,您可以使用 .net 团队的ClrMD。介绍可here

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2012-10-25
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多