我在互联网上浏览了一些随机文章,内容涉及如何优化循环中的文件输入并尝试自己进行测试。他们声称,在大多数情况下,对文件描述符的操作比直接从文件读取到循环中可以更快更有效。我尝试这样做:
首先从文件中直接读入循环:
time while read a ; do :;done < testfile
此命令花费的时间是:
real 0m8.782s
user 0m1.292s
sys 0m0.399s
现在,我尝试做一些文件描述符操作,就像这篇文章中建议的那样:
exec 3<&0
exec 0 < testfile
在循环结束时,我将数据读取为0<&3
,这意味着将文件描述符3
重定向到0
。因此,完整的行如下所示:
exec 3<&0;exec 0<testfile; time for i in $(seq 1 20);do while read a; do :;done; done; exec 0<&3
这给了我一段时间:
real 0m8.792s
user 0m1.258s
sys 0m0.430s
但是我发现两种情况下的时间几乎相同,实际上,当我使用文件描述符时,速度稍慢一些。文件testfile
是6MB
,几乎有400k
行,每行最多包含20-25
个字符。
实际上,对于更大的文件,从文件中直接读取实际上比文件描述符操作要快。
答案 0 :(得分:0)
使用C。这是最快的速度,而且如果您真的关心速度的话。
您可以从输入流向function onFormSubmit11(e) {
var range = e.range;
var ss = range.getSheet();
var row = range.getRowIndex();
ss.getRange("AN"+row).clear();
ss.getRange("AO"+row).clear();
ss.getRange("AP"+row).clear()
ss.getRange("AQ"+row).clear()
}
编写自己的程序,然后在每一行调用getline()
。由于进行了system
和fork()
调用,这可能会比较慢,但是如果可以将行操作放入C代码中,则可能会更快。
您可以编写自己的内置shell。 Shell exec()
构建仅调用read
,浏览bash here。您可以编写自己的shell内置程序,比默认的read()
内置程序更快地通过输入循环命令。像read
。
为了使您的帖子可重现,我创建了一个大文件:
my_read_bultin 'file' -- 'command to run on each line'
然后运行:
$ for ((i=0;i<1200000;++i)); do echo ${RANDOM}; done >/tmp/1
$ du -hs /tmp/1
6.5M /tmp/1