我们的应用程序在重新启动(冷启动)后启动所需的时间要比已经打开一次(温启动)的时间要长得多。
大多数(如果不是全部)的区别似乎来自于加载DLL,当DLL‘在缓存内存页中时,加载速度要快得多。我们尝试使用ClearMem来模拟重新启动(因为它比实际的重新启动要耗时得多),并且得到了混合的结果,在一些机器上,它似乎非常一致地模拟了重新启动,而在一些机器上则没有。
总括来说,我的问题是:
编辑:
对评论的澄清:
我忘了提到的是,我们通过重新建立所有二进制文件的基础而得到了一些改进,这样加载程序就不必在加载时执行它了。
发布于 2008-09-24 18:53:32
你是怎么分析你的代码的?并不是所有的分析方法都是一样的,有些方法发现热点比其他方法更好。你加载了很多文件吗?如果是这样的话,磁盘碎片和寻找时间可能会发挥作用。
也许,在代码中添加基本的计时信息,将日志文件写入日志文件,并检查冷/温启动时的文件,将有助于确定应用程序花在哪里的时间。
如果没有更多的信息,我将倾向于将文件系统/磁盘缓存作为这两种环境之间可能的区别。如果是这样的话,那么您要么需要减少预先加载文件的时间,要么需要找到更快的加载文件的方法。
示例:如果您正在加载大量二进制数据文件,请通过将它们合并到一个文件中来加快加载速度,然后在一次读取中将整个文件细化到内存中并解析它们的内容。较少的磁盘寻找和时间花在读取磁盘。再说一次,也许这不适用。
我不知道任何清除磁盘/文件系统缓存的工具,但是您可以编写一个快速应用程序,从磁盘上读取一堆不相关的文件,从而使文件系统/磁盘缓存装载不同的信息。
发布于 2008-09-24 13:12:47
发布于 2008-09-24 13:15:06
在软件中很难真正模拟重新启动。当您重新启动时,计算机中的所有设备都会被断言其重置位,这将导致所有内存系统范围的丢失。
在现代机器中,到处都有内存和缓存: VM子系统为程序存储内存页,然后在内存中缓存文件的内容,然后在硬盘上设置扇区的磁盘缓冲区。您可能可以使操作系统缓存被重置,但是磁盘上的缓冲区在驱动器上?我不知道怎么做。
https://stackoverflow.com/questions/127029
复制相似问题