我正在使用Memory Profiler模块来获取this回答后我的python代码的内存使用情况。但是,我无法解释@profile
magic的输出(或使用模块中mprof run
装饰器的输出或%memit range(10000)
的输出)。
例如,
peak memory: 97.41 MiB, increment: 0.24 MiB
给了我%memit xrange(10000)
while,
peak memory: 97.46 MiB, increment: 0.00 MiB
显示xrange
。我理解xrange type
返回range()
而不是peak memory
返回列表之间的区别。我在这里使用它们只是为了演示这两种情况。
我的问题是
increment
和sub extract_json{
my $file = shift;
local $/;
open my $fh, "<", "$file";
my $json = <$fh>;
return $json;
}
my $targetfile = extract_json(' URL of JSON file');
my $object = JSON::XS->new->decode (decode "UTF-8", $targetfile);
my $flat_hash = {
'var'=> $object->{'a'}{'b'}{'c'}{'d'}
};
实际上意味着什么? 答案 0 :(得分:3)
峰值内存是指程序运行期间系统的峰值内存使用量(包括其他进程的内存使用量)。
增量是内存使用量相对于程序运行前的内存使用量的增量(即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行没有计算)。 / p>