Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Performance 经常迭代还是过程密集型更有效?_Performance_Batch File_Iteration - Fatal编程技术网

Performance 经常迭代还是过程密集型更有效?

Performance 经常迭代还是过程密集型更有效?,performance,batch-file,iteration,Performance,Batch File,Iteration,我有很多文本处理脚本应用于很多文本文件。我正在编写一个批处理脚本(在Win7上)来启动它们,并遍历包含文本文件的目录和子目录。实际上,我想知道是否有一种更好的方法可以更频繁地迭代,或者在一次迭代中执行更多的进程,以提高效率: 变体A for x in y process 1 on x process 2 on x process 3 on x 或变体B for x in y process 1 on x for x in y process 2 on x for x in y proce

我有很多文本处理脚本应用于很多文本文件。我正在编写一个批处理脚本(在Win7上)来启动它们,并遍历包含文本文件的目录和子目录。实际上,我想知道是否有一种更好的方法可以更频繁地迭代,或者在一次迭代中执行更多的进程,以提高效率:

变体A

for x in y
process 1 on x
process 2 on x 
process 3 on x
变体B

for x in y
process 1 on x

for x in y
process 2 on x

for x in y
process 3 on x

提前谢谢你

这完全取决于循环的大小、进程的数量以及这些进程所需的资源(当然还有您使用的编程语言;) 解决这个问题的最好方法是创建一个测试脚本,让这两种方法都试试看,which是最快的


如果差异很小,我会选择最干净的解决方案,只使用一个循环执行多个进程。。。只是因为它更容易阅读。

这取决于几个因素,所以没有确定的答案。然而,我认为您采取的方法主要取决于您正在做的处理

假设
process1
改变了它的输入,就像
process2
process3
一样。如果可能,您可以编写处理程序,以便他们可以采用
stdin
,对其进行处理,并将输出提供给
stdout
——这样您可以:

for each x in y do
  process1 x | process2 | process3 > x_new
  overwrite x with x_new
每个文件只读入一次,通过管道通过所有进程“完成它们的任务”,并在最后被替换


但正如我所说,这完全取决于处理的实际效果。

评论,因为这只是一种意见。在没有更多信息的情况下,第一种方法应该更好地利用文件系统缓存。
for/f
循环在处理大量文件/长文件名时也有一个错误,这会导致长时间延迟。任务的详细信息对于给您提供答案很重要,因为在某些情况下,常规的
for
循环也会处理不正确。在批处理脚本中处理任务的最佳方式通常取决于实际任务。