cih*_*a87 4 dll performance devexpress winforms c#-4.0
我在.NET 4框架上有一个Windows窗体应用程序并使用Devexpress组件.在我的应用程序的第一次运行中,它等待20或30秒来装载组件.之后它像火箭一样运行:)我该如何解决这个问题?我搜索了一些,发现了NGEN.exe.我不知道NGEN是否可用.有没有其他简单的方法来增加装载速度?你喜欢哪个?
你有冷启动问题.冷启动时间由磁盘驱动器控制,将组件定位在磁盘上.热启动很快,程序集存在于文件系统缓存中,因此不必位于慢速磁盘上.
使用ngen.exe会使冷启动变得更糟,它需要找到另一个文件.Microsoft建议您仅在大型程序集上使用ngen.exe的原因.Jitting实际上比找到ngen 图像文件更快.
关于慢速冷启动你没有那么多,这是一个纯粹的硬件问题,你需要一个更快的磁盘来真正领先.确保它的碎片整理确实有帮助.SSD很不错.您可以使用ILMerge.exe来减少需要找到的DLL的数量.如果用户在机器启动后经常足够地启动程序,那么这个问题往往会随着时间的推移而自行解决.Windows了解使用模式并预取可执行文件,以便在需要时它们位于文件系统缓存中.一个名为SuperFetch的功能.
Fwiw,缓慢的冷启动并不是.NET程序所独有的,使用大量DLL的非托管程序也存在这个问题.Office和Adobe Reader是常见的例子.他们作弊,他们安装了一个登录时运行的"优化器".它所做的就是将这些DLL放入文件系统缓存中.很烦人.你也可以这样做,当然我不能推荐.
也许安装后会自动运行程序的存根?也就是说,使用一个开关自动加载程序,并在安装的最后一步中静默退出。大多数人预计安装需要几秒钟/分钟,因此大多数人甚至不会注意到。
更新:我检查了MSDN C# 文档,它说程序集是按需加载的(根据需要),但您可以使用Assembly.ReflectionOnlyLoadFrom方法强制它们显式加载。如果您在用户输入登录信息时预加载程序集(以及可选的依赖项),那么您将有效地隐藏加载延迟。