0

我在 Windows 上使用 C++/CLI。这是一个使用 /clr 构建的 MFC 应用程序。

我想测试我的应用程序启动需要多长时间。第一次用了10s,后来用了4s、4s、5s。我假设这是由于 Windows 缓存了 DLL。

是否有一些工具可以让我从缓存中删除一个目录,以便我的测试条件每次都相同?我不想在测试之间重新启动:)

4

2 回答 2

3

如果您使用的是 .Net 框架,那么这 6 秒很可能正在等待框架初始化(加载 mscoree.dll 等)。CLR 由内而外:提高应用程序启动性能是为 MSDN 杂志撰写的文章。

冷启动需要加载所有 .Net Framework 并运行 JIT 编译器来生成代码。

在大多数情况下,冷启动受 I/O 限制。换句话说,花在等待数据上的时间比花在处理指令上的时间要多。启动应用程序所花费的时间等于操作系统从磁盘获取代码所花费的时间加上执行附加处理所花费的时间,例如 JITing IL 代码和在启动路径中执行的任何其他初始化应用。由于处理通常不是冷启动的瓶颈,因此任何应用程序启动性能调查的初始目标都是通过减少加载的代码量来减少磁盘访问。

当您第二次启动应用程序时,几乎所有这些都已完成。即 DLL 已加载,它可能会提取先前编译的代码等。

减少启动时间的最佳方法是在第一个窗口显示之前减少 .Net 框架调用的数量(因为所有这些都需要在它可以运行之前进行编译)并减少磁盘 I/O 的数量需要启动您的程序。

一旦您的程序启动并运行,任何来自 .Net 的未编译 IL 都将在首次调用时由 JIT 编译器编译。

此外,据我所知,一旦加载了框架,就没有一种简单的方法可以在不重新启动的情况下卸载它(如果你可以完全卸载它的话)。在加载框架之前让虚拟机处于保存状态可以大大减少“重新启动”所需的时间。

于 2009-09-28T14:29:05.887 回答
0

What Joshua said, plus, look at the third paragraph of this answer.

于 2009-11-17T22:17:36.487 回答