2012-11-29 50 views
0

我们有一种工具可以从一些光学介质中加载数据,一旦它们全部复制到硬盘驱动器中,就可以通过第三方工具进行处理。我想优化这个过程,这样每个文件在读入时都会被处理。问题是,第三方工具(我自然不能改变)有12秒的启动开销。在尽快完成整个过程方面,我能处理的最好方法是什么?我可以在每次运行中将任意数量的文件传递给处理工具,因此我需要能够确切地确定何时运行该工具以获得总体上最快的结果。被复制的数据可以是任何一个大文件(在完全复制之前无法处理)到数百个小文件。正在加载数据时正在处理数据

+0

你正在运行它的系统是什么?在提供第三方工具之前,您可以连接文件吗? – piokuc

+0

Windows 7 x64。我真的不知道如何连接文件会有帮助吗?这意味着在开始之前我必须等待所有文件的复制,所以我什么也得不到。 12s的开销是每次运行,而不是每个文件,所以当复制所有文件后,所有文件在一个批处理中都没有问题。当我多次运行它时,这只是一个问题。 – spencercw

回答

0

最简单的方法是创建并运行2个线程,一个运行该工具,一个加载数据。启动12秒计时器并触发两个线程。在每个文件加载完成后检查传递的时间。如果超过12秒,请将数据提取到运行该工具的线程中。重新启动将数据并行加载到之前批量的处理。一旦前面的批量处理完成后,重新启动12秒计时器并在每次文件加载完成时继续检查它。重复,直到没有更多的数据。

为了获得更好的结果,可能需要更复杂的解决方案。您可以执行一些基准测试来评估平均数据加载时间。由于小文件和大文件可能会有所不同,因此可能需要针对不同类别的文件(根据大小)进行几次评估。最佳资源利用率将是以新数据到达的相同速率处理数据的资源利用率。处理时间包括12秒启动。基准测试应该为您提供处理线程数与读取线程数的比率(您还可以根据传入文件大小减少/增加活动读取线程的数量)。实际上,这是多个生产者和消费者的producer-consumer问题的变体。