gpt4 book ai didi

c# - 在基于 Web 的插件架构中重用加载的程序集。最大化性能

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:00 25 4
gpt4 key购买 nike

编辑:我想保持基础架构不变,因此尽管框架想法值得赞赏,但请让您的建议以我提供的上下文为中心。


背景

我正在构建一个动态加载插件的基于 Web 的应用程序。每个插件都带有一个 list 文件,其中包含其 dll 位置、命名空间和类型。

现在我正在使用 System.Reflection.Assembly.LoadFile 根据 list 文件中提供的位置加载 dll。然后我加载类型等等。

旁白:我最终可能会更改为 System.Reflection.Assembly.LoadFrom,因为我最终将从 bin 目录外部加载文件。但如果他们是更好的方法(Assembly.Load 或其他),请随意添加它

问题

问题是多个插件可能会运行同一个 dll。所以我最终多次执行 System.Reflection.Assembly.LoadFile("Identical.dll")

我想通过遍历 AppDomain.CurrentDomain.GetAssemblies() 来检查我的程序集是否已经加载,但我不知道这是否有助于提高性能(或者是否将工作期间,我还没有尝试过)。

此外,由于项目的设计限制,我无法保留已加载程序集的列表(虽然您可能会争辩说这是一个糟糕的设计:我无法更改它,即使我想或同意你...所以请不要紧迫这个问题......请......除非你真的对此有强烈的感觉,我想你可以将其添加为建议)。

最终我的目标是:

  1. 永远不要重新加载同一个程序集两次。
  2. 性能是关键。

最佳答案

如果您使用 LoadFrom对于您的所有调用,它只会为每个 AppDomain 加载一次程序集。请参阅 MSDN 主题和 Suzanne Cook 的 Choosing a Binding Context了解更多详情。

关于c# - 在基于 Web 的插件架构中重用加载的程序集。最大化性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427339/

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