在我的工作中,我们正在使用.net Framework 4开发不同的应用程序。所有应用程序都使用我们开发的通用程序集,例如data.dll中的数据层。这些应用程序驻留在网络驱动器上并直接从那里启动。
大多数大型应用程序第一次启动(冷启动)需要一段时间,例如 4-5 秒。随后的发射速度要快得多,几乎是瞬时的。我认为这与网络无关,因为最大的组件约为 900KB,而且我们使用的是千兆网络。
我想创建一个在计算机启动时启动的服务,并加载特定目录下的所有 .net 程序集。我希望当用户启动程序时,所有必需的程序集都已被加载并“JITed”,因此启动应该更快。
我知道如何创建服务,但我想知道这是否可行,因为我对 CLR 的理解非常有限...此外,执行诸如 Assembly.LoadFrom(fileName) 之类的操作可以预加载程序集吗?如果我有一段时间没有启动任何程序,它们会保持加载状态还是在一段时间后自行卸载?如果我更改已加载的程序集会发生什么情况?
基本上,我想做类似的事情OpenOffice 快速入门 http://wiki.services.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Getting_Started/Using_the_Quickstarter_under_Windows,但是对于我们自己的应用程序框架。
感谢大家!!!
- -编辑 - -
这很有趣... http://msdn.microsoft.com/en-us/library/43wc4hhs.aspx似乎以正确的方式进行,但不确定我是否理解一切......
您已经知道 JIT 编译不是问题,这也会减慢第二次启动的速度。您所要做的就是获取文件系统缓存中的 DLL。这样当您稍后启动程序时,它将使用缓存中该 DLL 的副本,而不是通过网络连接驱动器来查找它。这需要时间。 Office Quick Start 使用同样的技巧。如果所有这些预装的东西不再适合,不确定谁会赢。
只需创建一个 Winforms 应用程序,这样您就不会获得窗口,然后调用 Assembly.Load() 来加载程序集,调用 File.ReadAllBytes() 来确保整个内容都在缓存中。在启动文件夹中放置该程序的快捷方式。您提到的那个程序集足够大,足以在 Ngen.exe 的热启动中得到提升。不过,这必须在每个单独的工作站上运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)