尝试理解Python内存分析器

8
我正在使用Memory Profiler模块来获取我的Python代码的内存使用情况,按照这个答案所述。然而,我无法解释%memit魔术命令的输出(或者使用该模块的@profile装饰器或mprof run的输出)。
例如,
%memit range(10000) 

给我 峰值内存: 97.41 MiB, 增量: 0.24 MiB

然而,

%memit xrange(10000)

显示 峰值内存:97.46 MiB,增量:0.00 MiB。我确实理解xrange返回xrange类型range()返回列表之间的区别。我在这里使用它们只是为了演示两种情况。

我的问题是:

  1. 峰值内存增量实际上是什么意思?
  2. 从这个输出中,我应该报告脚本(或函数)的总内存使用情况是什么?
1个回答

14

峰值内存是指程序运行期间系统的最高内存使用量(包括其他进程的内存使用量)。

增量是相对于程序运行前的内存使用量的内存使用增量(即increment = peak memory - starting memory)。

因此,您应该报告increment。峰值内存只是帮助您确定在程序运行期间接近使用所有RAM的程度。

如果您参考读我文件中用法部分中的逐行示例:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

%memit 从第6行开始给出内存使用情况,但相对于第4行报告增量(实际上是第1行,但假设第1-3行中没有计算)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接