我有一个程序,它将文件夹作为输入并处理其中的图像。
当我第一次运行程序时,会在一秒钟内处理大约5张图像。
在第二轮中,它会在一秒钟内处理20张图像。
在后续运行中,它会在一秒钟内处理大约50张图像。
我知道这肯定与缓存有关。
我的问题是,如何在第一次迭代中快速运行程序?
这对我来说非常重要,因为我的客户每天只需要运行一次程序,因此在第一次运行时需要快速运行。
更新1:这是一个基于Windows的应用程序。
感谢。
答案 0 :(得分:2)
这里的瓶颈是访问磁盘上数据的速度。
根据您的图像处理类型,您可以加快速度(通过使用更好/更快的库或优化),这会使每次连续运行中处理的图像数量更大。
如果你有(图像/秒)
20,30,50,50,50
然后它将成为
21,32,53,53,53
或
30,45,75,75,75
取决于与加载相比处理所需的时间。您可以使用分析器或简单的度量加载/处理时间来更好地了解您可以在最大值时获得的成功(理论上将处理时间减少到零)。
如果您正在尝试制作
然后它不可能通过软件,因为你需要时间来加载图像,这个时间必须花费。您可以尝试使用缓存来预先缓存某些内容,但是您将无法获胜,因为程序的总执行时间在第一次运行时仍然相同,如果第二次运行它(当缓存已经发生时) ),它仍将是平均值(总执行时间/总图像数)50,50,50,50,50
20,30,50,50,50
即使您使用SSD,首次运行时仍然会有较低的速度,因为内存(Windows磁盘缓存)速度更快。仍然采用更快的磁盘(SSD RAID?= D)将大大增加加载速度(假设你现在有正常的硬盘),但处理时间仍然相同。
为什么要让程序运行得更快?也许是因为必须手动运行或以其他方式阻止用户使用Windows或其他软件?然后如何在极低速度的背景下进行此处理,以免打扰用户?它可以与Windows一起启动,并使用一些IPC与其他软件(甚至是其中的一部分)来确定何时/何种/如何处理。作为一个很好的例子,使用很多启发式(这意味着漫长的处理时间)非常好的防病毒,你不会想每天运行它来扫描所有东西(它需要花费很多时间而且它非常密集),但如果它在后台运行,只在预定的时间(每次使用PC时)进行必要的作业,每周/每月扫描一次,那么它绝对没问题。