免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: glauke
打印 上一主题 下一主题

如何控制perl程序的内存? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-05-13 18:43 |只看该作者
本帖最后由 DQP 于 2010-05-13 19:38 编辑

他又没说他想干嘛
至少省下个字符串。 而且一次对这么大个字符串做splite估计会生成很大的中间变量。

论坛徽章:
0
12 [报告]
发表于 2010-05-13 18:46 |只看该作者
乘10估计都比较保守。。

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
13 [报告]
发表于 2010-05-13 19:01 |只看该作者
不要先载入后分段,这个肯定慢.


用$/=' '; 在while的时候直接push到数组

论坛徽章:
0
14 [报告]
发表于 2010-05-13 19:14 |只看该作者
回复 6# DQP


    用了你的方法做了测试,内存减小了一半,但是还是很大,5G左右。
  另外我如果把@a = split //, $a这句话注释掉,内存只占100M左右,说明连接字符并不是太耗内存。
  我觉得这个问题主要是楼上人说的perl的存储不是按照char来存的原因吧。

论坛徽章:
0
15 [报告]
发表于 2010-05-13 19:21 |只看该作者
小骆驼就讲到了perl 的自由导致他用内存很不节俭。一次读一个大文件是不合适的!它使用的内存远远超过文件大小!

论坛徽章:
0
16 [报告]
发表于 2010-05-13 19:39 |只看该作者
你要干啥?

论坛徽章:
0
17 [报告]
发表于 2010-05-13 19:45 |只看该作者
回复 13# ttcn_cu


    这个方法不可行啊,把换行符改成''之后也不是按照一个字符一个字符的读啊

论坛徽章:
0
18 [报告]
发表于 2010-05-13 19:48 |只看该作者
回复 10# dugu072_cu


   谢谢啦,受教了。那perl里面在这样的问题上有办法像c一样控制内存吗?

论坛徽章:
0
19 [报告]
发表于 2010-05-13 19:56 |只看该作者
没有。
如果你一定要把每个字符都放到数组中去。 那么没办法帮你。
你把你的需求说出来 也许能想出其他办法

论坛徽章:
0
20 [报告]
发表于 2010-05-14 09:50 |只看该作者
回复 19# DQP


    是这样的,我现在有一个字符串文件,比如说是有abcdefghijklmn,另外有一个文件是这样的信息:
   5        e
     7        g
     11      k
    前面一列是位置(从1开始记),后面是字符,我现在想验证这个文件这样的信息有多少是对的,多少是错的。

   我的想法是把前面的字符串存到数组里,用下标做索引,这样速度会很快,如果用substr返回该位置的字符的话可能会慢一些。
   不知有没有其他高效的办法?

   另外前面有位哥们说把换行符换成空,然后再读,我发现这样写不是一个字符一个字符的读,而是直接读到了文件的末尾,好奇怪啊,这是为什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP