gpt4 book ai didi

.net - 如何预加载 .net 程序集

转载 作者:行者123 更新时间:2023-12-01 02:53:25 24 4
gpt4 key购买 nike

在我的工作中,我们正在使用 .net framework 4 开发不同的应用程序。所有应用程序都使用我们开发的通用程序集,例如 data.dll 中的数据层。这些应用程序驻留在网络驱动器上并直接从那里启动。

大多数大型应用程序第一次启动(冷启动)需要一段时间,比如 4-5 秒。随后的发射速度要快得多,几乎是瞬间的。我认为这与网络无关,因为最大的程序集大约为 900KB,而且我们使用的是千兆网络。

我想创建一个在计算机启动时启动的服务,并将所有 .net 程序集加载到特定目录下。我希望当用户启动程序时,所有必要的程序集都已经加载并“JITed”,因此启动应该更快。

我知道如何创建服务,但我想知道这是否可行,因为我对 CLR 的理解非常有限……此外,是否会执行诸如 Assembly.LoadFrom(fileName) 之类的工作来预加载程序集?如果我有一段时间不启动任何程序,它们是保持加载状态还是一段时间后自行卸载?如果我更改已加载的程序集会发生什么?

基本上,我想做类似 OpenOffice Quick starter 的事情。 ,但对于我们自己的应用程序框架。

谢谢大家!!!

- -编辑 - -
This is interresting...似乎以正确的方式进行,但不确定我是否理解一切......

最佳答案

您已经知道 JIT 编译不是问题,这也会减慢第二次启动的速度。您所要做的就是获取文件系统缓存中的 DLL。这样当您稍后启动程序时,它将使用缓存中该 DLL 的副本,而不是通过网络连接的驱动器来查找它。这是什么需要时间。 Office 快速入门使用相同的技巧。如果所有这些预装的东西不再适合,不确定谁会赢。

只需创建一个 Winforms 应用程序,这样您就不会得到一个窗口,然后调用 Assembly.Load() 来加载程序集,调用 File.ReadAllBytes() 以确保整个内容都在缓存中。将此程序的快捷方式放在启动文件夹中。你提到的那个程序集足够大,可以从 Ngen.exe 热启动中得到提升。不过,这必须在每个单独的工作站上运行。

关于.net - 如何预加载 .net 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com