我在 Windows 上使用 C++/CLI。这是一个使用 /clr
构建的
MFC应用程序。
我想测试我的应用程序启动需要多长时间。第一次用了10秒,后来又用了4秒、4秒、5秒。我假设这是由于 Windows 缓存了 DLL 文件造成的。
是否有一些工具可以让我从缓存中删除目录,以便我的测试条件每次都相同?我不想在测试之间重新启动:)
如果您使用 .NET 框架,很可能这 6 秒是在等待框架初始化(加载 mscoree.dll 等)。 CLR Inside Out:提高应用程序启动性能 是为 MSDN 杂志撰写的文章。
冷启动需要加载所有.NET Framework并运行JIT编译器来生成代码。
在大多数情况下,冷启动受 I/O 限制。换句话说,等待数据所花费的时间比处理指令所花费的时间要多。启动应用程序所需的时间等于操作系统从磁盘获取代码所需的时间加上执行其他处理(例如 JITing IL 代码以及在启动路径中执行的任何其他初始化)所需的时间。应用。由于处理通常不是冷启动的瓶颈,因此任何应用程序启动性能调查的最初目标都是通过减少加载的代码量来减少磁盘访问。
当您第二次启动应用程序时,几乎所有操作都已完成。即 DLL 已加载,它可能会拉取先前编译的代码等。
减少启动时间的最佳方法是在第一个窗口显示之前减少 .Net 框架调用量(因为所有这些都需要在运行之前进行编译)并减少磁盘 I/ O 需要启动您的程序。
一旦您的程序启动并运行,任何来自 .NET 的未编译的 CIL 将在首次调用时由 JIT 编译器进行编译。
此外,据我所知,一旦加载了框架,就没有一种简单的方法可以在不重新启动的情况下卸载它(如果你可以卸载它的话)。在加载框架之前让虚拟机处于保存状态可以大大减少“重新启动”所需的时间。
约书亚所说的,加上,看看这个答案的第三段。