【问题标题】:Measure memory used by code测量代码使用的内存
【发布时间】:2012-11-06 21:39:14
【问题描述】:

我想在 C# 或 C++ 或 C 中改进一些方法。
要测量时间,我可以使用 Stopwatch 类,但另外我想测量已灭绝代码保留的内存。您是否知道任何与下面代码中使用的 MemoryMeasure 类具有相似属性的类或方法?

Stopwatch s1 = Stopwatch.StartNew();
MemoryMeasure m1 = MemoryMeasure.Start();
for (int i = 0; i < m; i++)
{
//some compute
//for example
//var x = new LargeObject(new SmallObject(), 45);
//some compute
//some compute
}
m1.Stop();
s1.Stop();

Console.Writeline("Your code was executed in " + s1.ElapsedMilliseconds + "ms");
Console.Writeline("Your code ate " + m1.UsedMemory + "MB of memory");

【问题讨论】:

    标签: c# c++ c optimization performance


    【解决方案1】:

    您需要使用内存分析器 - 有多种免费和商业工具。

    dotTraceAnts memory profiler 是两个流行的商业广告。

    还有a few free ones

    【讨论】:

    • 使用GC.GetTotalMemory有什么问题,你能详细说明一下吗?
    • @TimSchmelter - 请参阅this answer 是有原因的(基本上,测量点之间可能会发生 GC 循环,从而使值变为负值且无意义)。
    【解决方案2】:

    您可以尝试使用 GC.GetTotalMemory 静态方法,但我不确定以这种方式测量内存是否是个好主意。内存分析器是更好的选择

    【讨论】:

    • Oded 是对的,GC 不是你可以依赖的东西,它的工作相当不可预测,所以不能保证在相同条件下每次调用 GetTotalMemory 都会收到正确的值。
    猜你喜欢
    • 2015-09-29
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2010-09-23
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多