当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl中找到哈希占用的物理内存量?

如何解决《如何在Perl中找到哈希占用的物理内存量?》经验,为你挑选了3个好方法。

我有一个Perl脚本,我使用哈希表维护一个非常简单的缓存.一旦占用超过n个字节,我想清除散列,以避免Perl(32位)耗尽内存并崩溃.

我可以检查键值对的数量:

if (scalar keys %cache > $maxSize)
 {
 %cache = ();
 }

但是有可能检查哈希占用的实际内存吗?



1> cjm..:

Devel :: Size是您问题的答案.(请注意,Devel :: Size在处理大型数据结构时会暂时分配大量内存,因此它不太适合此目的.)

但是,Cache :: SizeAwareMemoryCache和Tie :: Cache已经实现了你正在寻找的东西(有一些不同的接口),并且可以帮你避免重新发明轮子.

Memoize是一个模块,可以很容易地缓存函数的返回值.它没有实现基于大小的缓存限制,但应该可以使用Tie :: Cache作为Memoize的后端.



2> mbac32768..:

您正在寻找Devel :: Size

名称

Devel :: Size - 用于查找Perl变量的内存使用情况的Perl扩展

概要
use Devel::Size qw(size total_size);

my $size = size("A string");
my @foo = (1, 2, 3, 4, 5);
my $other_size = size(\@foo);
my $foo = {a => [1, 2, 3],
        b => {a => [1, 3, 4]}
       };
my $total_size = total_size($foo);



3> user11318..:

您可以安装Devel :: Size来查找Perl中任何构造所占用的内存.但请注意,它将需要大量的中间内存,因此我不会将它用于大型数据结构.如果你认为你可能会失去记忆,我肯定不会这样做.

顺便说一句,CPAN上有许多好的模块可以在内存中进行缓存.而不是自己滚动我会建议使用其中之一.例如,尝试使用Tie :: Cache :: LRU作为内存缓存,该缓存只能达到指定数量的密钥.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有