如何在第一次运行时加快C#程序的运行速度
本文关键字:程序 运行 速度 第一次 运行时 | 更新日期: 2023-09-27 18:00:17
我有一个程序,它将文件夹作为输入并处理其中的图像
当我第一次运行该程序时,大约有5张图像在一秒钟内得到处理。
在第二次运行中,它在一秒钟内处理20个图像。
在随后的运行中,它在一秒钟内处理大约50张图像。
我知道这肯定与缓存有关。
我的问题是,我应该怎么做才能在第一次迭代中快速运行程序?
这对我来说非常重要,因为我的客户每天只需要运行一次程序,因此第一次运行时需要快速。
更新1:这是一个基于windows的应用程序。
谢谢。
这里的瓶颈是访问磁盘上数据的速度。
根据您所做的图像处理类型,您可以加快速度(通过使用更好/更快的库或优化),这将使每次连续运行中处理的图像数量更大。
如果你有(图像/秒)
20、30、50、50、50atr
那么它将变成
21,32,53,53,53atr
或
30,45,75,75,75atr
这取决于处理与加载相比需要多长时间。您可以使用探查器或简单的测量加载/处理时间来更好地了解您在max下可能赢得的结果(理论上是将处理时间减少到零)。
如果你正在尝试制作
50,50,50,50,50
那么通过软件是不可能的,因为你需要时间来加载图像,而这段时间必须花掉。您可以尝试使用缓存来预缓存某些内容,但您将一无所获,因为程序的总执行时间在第一次运行时仍然相同,如果第二次运行(当缓存已经发生时),它仍然处于平均值(总执行时间/总图像)
20、30、50、50、50atr
即使您使用SSD,在第一次运行时仍然会有较低的速度,因为内存(Windows磁盘缓存)更快。仍然使用更快的磁盘(SSD RAID?=D)将显著提高加载速度(假设您现在有普通HDD),但处理时间仍然相同。
为什么要让程序运行得更快?也许是因为它必须手动运行,或者以其他方式阻止用户使用Windows或您的其他软件?那么,在后台以非常低的速度进行此处理以避免干扰用户如何?它可以与Windows一起启动,并使用一些IPC与其他软件(甚至是其中的一部分)来确定何时/如何处理。举个好例子,以一个非常好的防病毒软件为例,它有很多启发式(这意味着处理时间很长),你不想每天运行它来扫描所有内容(这需要很多时间,而且非常密集),但如果它在后台运行,只做必要的工作,在计划的时间进行每周/每月扫描(当PC使用较少时),那么这绝对没有问题。