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 和
a\nb\nc\n
这样的文件,只想数行(合成示例)。处理速度将比运行文件的磁盘头快得多,因此读取许多不同的文件将导致很大的开销@戈登:给我们更多的细节,让我们更好地知道这是否会有什么不同。谢谢各位,我正在从这些独特的文件中提取一些数据。这两个案子我都做过,而且差不多是在同一时间。我必须优化处理线条的方式正确无误。如果您多次读取每个文件,您可能会受益于1cat*>bigfile
,然后经常读取该文件;但是如果是一次,就不会有太大的区别。将它们放在一起需要上下文切换时间,不管缓冲区缓存系统有多聪明。顺便说一句,Perl的内部glob
函数应该没有NCARGS限制。嗯,你是对的,我不知道为什么我认为这会是一个问题。