免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5052 | 回复: 10
打印 上一主题 下一主题

急,一个关于open一个相当大的size的文件问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-25 12:33 |只看该作者 |倒序浏览
为什么perl用open()不能打开一个3G多的文件,但是1.5G的文件却能打开?
而且我在系统里面用more是可以看的。
系统是SOLARIS 5.8 64BIT ,perl版本是5.6
是不是系统本身对打开文件的大小有限制?
如果有,请问是在那个地方?可以用命令看到么?我系统的ulimit -a结果如下:

core file size (blocks)     unlimited
data seg size (kbytes)      unlimited
file size (blocks)          unlimited
open files                  256
pipe size (512 bytes)       10
stack size (kbytes)         8192
cpu time (seconds)          unlimited
max user processes          29995
virtual memory (kbytes)     unlimited
哪位高人能帮忙,,十分感激!

论坛徽章:
0
2 [报告]
发表于 2005-07-25 13:21 |只看该作者

急,一个关于open一个相当大的size的文件问题

那个高手出出主意啊!

论坛徽章:
0
3 [报告]
发表于 2005-07-25 17:47 |只看该作者

急,一个关于open一个相当大的size的文件问题


  1. tie @lines, 'Tie::File', $filename;
复制代码

@lines的每一个index代表文件的一行
操作完了以后用
  1. untie @lines;
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-07-25 19:12 |只看该作者

急,一个关于open一个相当大的size的文件问题

估计你是一次性读入,这样的话,可能内存或者缓存不够造成的。

论坛徽章:
0
5 [报告]
发表于 2005-07-27 09:34 |只看该作者

急,一个关于open一个相当大的size的文件问题

en,没试过读这么大的文件,我觉得如果是一行一行处理,应该没问题。
while(<> {...}

一次性读入肯定不好:
@lines = <MYFILE>;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2005-07-27 09:37 |只看该作者

急,一个关于open一个相当大的size的文件问题

[quote]原帖由 "笨狗"][/quote 发表:

笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<> 然后重新命名要慢不止一个数量级。

论坛徽章:
0
7 [报告]
发表于 2005-07-27 12:30 |只看该作者

急,一个关于open一个相当大的size的文件问题

我打开过6G的文件。

论坛徽章:
0
8 [报告]
发表于 2005-07-27 22:49 |只看该作者

急,一个关于open一个相当大的size的文件问题

原帖由 "flw" 发表:

笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<> 然后重新命名要慢不止一个数量级。


Tie::File document said :

The file is not loaded into memory, so this will work even for gigantic files.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2005-07-28 01:18 |只看该作者

急,一个关于open一个相当大的size的文件问题

原帖由 "Qiang" 发表:
Tie::File document said :

The file is not loaded into memory, so this will work even for gigantic files.

可是我处理一个 8M 的文件要好几分钟。
用 while(<> 就快得多。几秒钟就完成了。

论坛徽章:
0
10 [报告]
发表于 2005-07-28 02:10 |只看该作者

急,一个关于open一个相当大的size的文件问题

原帖由 "flw" 发表:

笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<> 然后重新命名要慢不止一个数量级。

用while(<>快是因为它使用内存没有限制,而tie默认只使用2MB的内存
也可以让tie使用尽量多的内存
The default memory limit is 2Mib. You can adjust the maximum read cache size by supplying the memory option. The argument is the desired cache size, in bytes.
  1. # I have a lot of memory, so use a large cache to speed up access
  2. tie @array, 'Tie::File', $file, memory =>; 20_000_000;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP