我正在使用Windows 性能分析器。我的应用程序是一个简单的解析器,它使用外部命令行程序来解析文件。每个文件都会调用此外部程序。在 Windows 7 中执行时的样子如下:
如您所见,有两个短寿命进程同时创建:conhost.exe
和
src2srcml.exe
。奇怪的是,这些进程第一次存活的时间比后来长得多。这是什么原因造成的?
Windows 是否有可能以某种方式缓存这些进程?
答案1
Windows 7 确实会在内存中缓存所有类型的文件,包括应用程序。您的猜测可能是正确的,进程在内存中的事实使它们启动得更快。不仅可执行文件本身被缓存,而且它们所需的 DLL 也已加载并准备就绪。
答案2
conhost.exe
是控制台托管进程,由命令提示符 (cmd) 启动。它之所以存在是因为您正在使用命令行程序。
src2srcml.exe
是srcML 工具包,可能是因为您正在操作源标记或 XML 文件。
至于为什么第一次调用速度较慢,正如 MoJo 已经指出的那样,这是因为第一次调用将需要的对象加载到内存中。只要 Windows 不需要 RAM,它就会保留所有已读取或写入的文件块。
这包括可执行文件、DLL 文件、磁盘表、目录结构、用户数据文件、注册表、所需的内核模块,简而言之,磁盘上的所有东西都被 Windows 缓存。
缓存的大小完全是动态的,可能会扩展到 RAM 的一半以上。当程序需要内存时,Windows 将释放已读取的块。它还会定期检查是否需要写出已修改的块,以便它们可以成为释放的候选(惰性写入),这就是为什么拔掉 Windows 计算机上的电源插头不是一个好主意。
这就是为什么新的调用速度更快的原因,因为 Windows 已经通过将所有需要的对象加载到 RAM 中来适应您的需要。