4

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

在应用程序流可以容忍延迟的点强制加载所有引用的程序集以避免它在可能无法容忍的进一步执行中(例如,在时间关键的方法中)是否有意义?

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

4

1 回答 1

2

我现在雇主的一个产品从入口程序集的目录中获取所有 DLL 的列表。然后它使用Assembly.LoadFrom. 它在启动画面启动时执行此操作。坦率地说,代码让我害怕。我们不得不采取一些技巧来避免某些 DLL。在更新之前,我们必须更改安装程序以清除目标目录。这是一个非常不安全的计划。

在之前的工作中,我编写了一个使用该GetReferencedAssemblies方法的类似函数。从入口程序集开始,它会递归调用Assembly.LoadFrom. 它会在加载我们产品未附带的程序集后停止递归。它奏效了,但我认为这是不必要的。

在我目前工作的产品中,我们使用 Autofac 为应用程序构建完整的依赖关系树。用于配置的引导程序代码引用了整个项目中的所有服务——我猜这至少占代码的 70%。同样,这是在启动画面启动时触发的。这是正确的做法。它平衡了“加载必需品”与“花时间加载所有东西,包括可能永远不会使用的东西”。

于 2014-04-02T13:13:37.220 回答