Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:读取多个文件对性能的影响_Perl - Fatal编程技术网

Perl:读取多个文件对性能的影响

Perl:读取多个文件对性能的影响,perl,Perl,我想知道这种情况下什么更好 我必须阅读成千上万的文件。我想打开每个文件,读一个,然后关闭它。或者将所有文件放入一个文件中并读取 建议?这都是用Perl编写的。它不应该有太大的区别。这听起来像是过早的优化。只需按顺序读取文件即可。Perl的文件i/o函数对于操作系统中的本机文件i/o调用来说是非常简单的包装,因此担心简单文件i/o的性能没有多大意义。如果将所有文件放入一个更大的文件中的时间无关紧要,那么速度会更快(只有在按顺序读取文件时,这是默认情况) 当然,如果考虑到这个过程,它会慢得多,因为你

我想知道这种情况下什么更好

我必须阅读成千上万的文件。我想打开每个文件,读一个,然后关闭它。或者将所有文件放入一个文件中并读取


建议?这都是用Perl编写的。

它不应该有太大的区别。这听起来像是过早的优化。

只需按顺序读取文件即可。Perl的文件i/o函数对于操作系统中的本机文件i/o调用来说是非常简单的包装,因此担心简单文件i/o的性能没有多大意义。

如果将所有文件放入一个更大的文件中的时间无关紧要,那么速度会更快(只有在按顺序读取文件时,这是默认情况)

当然,如果考虑到这个过程,它会慢得多,因为你必须读,写,再读

一般来说,读取一个1000M的文件应该比读取100个10M的文件快,因为对于100个文件,您需要查找元数据


正如tchrist所说,性能差异可能并不重要。我认为这取决于文件的类型(例如,对于数量庞大且非常小的文件,差异会大得多)以及系统及其存储的总体性能。

请注意,如果文件数量大于
ulimit-n
值,则
cat*
可能会失败。因此,顺序读取实际上更安全。
此外,考虑使用<代码> OpenDIR 和Redidir <代码>,而不是<代码> GOLB如果所有的文件都位于同一个DIR中。

不管你喜欢什么,都会显示程序花费了大部分时间来处理这些行,因此不值得优化打开部分。运行时间越长。这只是对现实的一个粗略的近似,但它是正确的,而不是错误的:内部解释器调度循环将占据主导地位?戈登没有描述对这些文件做了什么。想象一下,他有1000个像
a\nb\nc\n
这样的文件,只想数行(合成示例)。处理速度将比运行文件的磁盘头快得多,因此读取许多不同的文件将导致很大的开销@戈登:给我们更多的细节,让我们更好地知道这是否会有什么不同。谢谢各位,我正在从这些独特的文件中提取一些数据。这两个案子我都做过,而且差不多是在同一时间。我必须优化处理线条的方式正确无误。如果您多次读取每个文件,您可能会受益于1
cat*>bigfile
,然后经常读取该文件;但是如果是一次,就不会有太大的区别。将它们放在一起需要上下文切换时间,不管缓冲区缓存系统有多聪明。顺便说一句,Perl的内部
glob
函数应该没有NCARGS限制。嗯,你是对的,我不知道为什么我认为这会是一个问题。