控制被引用的.NET程序集何时加载

4

通常情况下,当执行引用程序集中的类型的第一个方法时,引用程序集会被加载。

是否有意义在应用程序流程可以容忍延迟的时候强制加载所有引用程序集,以避免在后续执行中可能无法容忍的情况下出现延迟(例如在时间关键的方法中)?

如果是,最好的方法是什么?(反射,...)


2
目前最好的方法是在时间不紧张的情况下执行一次。这可以确保汇编文件被找到并加载了其IL,代码也被即时编译。请注意垃圾收集器可能会导致暂停,因此请编写方法仅使用预分配的对象。 - Hans Passant
好的,你能更具体地说明一下,在时间不紧要的情况下需要执行什么吗? - Harry13
谢谢,现在我明白你的意思了... - Harry13
1个回答

2
我现任雇主的一个产品从入口程序集目录获取所有DLL的列表。然后使用Assembly.LoadFrom全部加载它们。这是在启动画面出现时进行的。这段代码让我感到担忧。我们不得不加入一些特殊处理方式来避免某些DLL。我们不得不更改安装程序以在更新之前清空目标目录。这是一个非常不安全的方案。
在以前的工作中,我编写了类似的函数,使用了GetReferencedAssemblies方法。从入口程序集开始,它会递归调用该方法,然后调用Assembly.LoadFrom。当它加载一个未随产品一起发行的程序集后,它将停止递归。它能够工作,但我后来认为这是不必要的。
在我现在的项目中,我们使用Autofac构建应用程序的完整依赖关系树。启动器代码配置所有项目中的服务——我猜这至少占70%的代码。同样,在启动画面出现时触发。这是正确的方法。它平衡了“加载必需品”和“花时间加载可能永远不会使用的东西”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接