我在运行时有一个静态对象,它基本上是其他对象的列表(整数,字符串,字典,其他对象等)。有没有办法在运行时确定我的静态“其他对象列表”对象使用的内存?这对于仪器和报告来说非常方便。
答案 0 :(得分:3)
Sizeof可用于值类型,还有Marshal.SizeOf,它可以与.NET的一些提示一起使用:
但是......这不完全是自运行时为同步块之类的类分配额外字节以来的总成本。
但是,如果您真的对测量此类事物感兴趣,则应使用性能分析API:
http://msdn.microsoft.com/en-us/library/ms404386.aspx
或者像windbg这样可以做各种奇妙事情的免费工具。
答案 1 :(得分:2)
你可能会要求你可以从你的代码中调用一些东西(我也想知道),但我觉得我应该提一下Ants profiler [http://www.red-gate.com/Products/ants_profiler/index.htm]以防其他人没有找到具体的东西。它将在执行时告诉您有关代码的各种信息,包括正在使用的内存量。
来自他们的网站......
配置内存,了解你的情况 应用程序使用内存,并进行定位 内存泄漏。内存分析器 允许您在任何地方拍摄快照 指出你的执行 程序,所以你可以看到什么是内存 在那时使用。你可以采取 不同时间的多个快照 当你的应用程序运行时,所以 你可以比较应用程序内存 的状态。
答案 2 :(得分:2)
答案 3 :(得分:1)
不是没有分析器。对于单个课程来说这很难 - 请参阅here。
答案 4 :(得分:0)
感谢您的回复。我认为我最初的攻击计划,因为我确信大多数对象都是可序列化的,将是这样的:
using (MemoryStream memstream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(memstream, myObjectOfObjects);
mem_footprint += memstream.Length;
}
catch
{
// not a serializable object
}
}