寻找动态加载DLL的优势,而不是让应用程序默认加载DLL。
答案 0 :(得分:4)
支持插件架构的一个优点是。
假设您要编写一个按计划执行不同类型任务的服务。这些任务正在做什么,实际上并不与您的核心服务相关,而核心服务只是在适当的时间启动它们。并且,您很可能希望在将来添加支持以执行其他类型的任务(或者其他开发人员可能希望这样做)。在这种情况下,通过实现插件方法,它允许您输入更多(通过接口兼容)dll,可以独立于核心服务进行编码。因此,添加对新任务的支持不需要整个服务的新构建/部署。如果某个特定任务需要更改,则需要重新部署该dll然后自动获取。
它还要求其他开发人员不要关心服务本身,他们只需要知道要实现的接口,以便可以接收它。
答案 1 :(得分:2)
我们将此架构用于处理应用程序,以处理不同客户所需的差异。每个DLL都有类似的结构,并实现相同的接口和输入方法“Process()”。我们有一个XML文件,它根据客户定义要加载的类,以及除了需要调用的进程之外是否还有更多方法。在您的交易计数变得非常高之前,性能不应成为问题。
答案 2 :(得分:1)
动态加载共享对象是允许插件 ad hoc 运行应用程序的机制。没有插件,模块化应用程序必须在链接时或编译时放在一起(查看nginx的代码)。
答案 3 :(得分:1)
你的问题是关于C#/ .NET所以在这个世界中动态DLL加载需要高级编程技能。这可以补偿动态DLL加载的所有潜在好处。你只需编写很多“低级别”代码。
在C ++ / Win32中,当这个DLL有一些新的API函数时,我经常需要动态加载DLL,这在旧操作系统上是不可用的。在这种情况下,我需要在运行时确保此API的可用性。我不能只链接这个DLL,因为它会导致旧版操作系统上的应用程序加载错误。
如前所述,您还可以在基于插件的环境中获得一些好处。在这种情况下,如果动态加载DLL,您将对资源有更多控制权。基本上COM是动态DLL处理的一个很好的例子。
答案 4 :(得分:1)
如果只加载所需的DLL,那么应用程序的启动时间应该更快。
答案 5 :(得分:0)
动态加载DLL的另一个原因是稳健性。
可以将DLL加载到所谓的AppDomain中。 Appdomain基本上是一个沙箱容器,您可以将其放入(DLL或整个EXE的任何部分)以隔离运行,但在您的应用程序中。
除非您调用AppDomain中包含的类型,否则它无法与您的应用程序进行交互。
因此,如果您有一个狡猾的第三方DLL,或者您没有其他源代码的DLL,您可以将其加载到AppDomain中,以使其与主应用程序流隔离。
最终结果是,如果第三方DLL引发抖动,则只有appdomain,而不是整个应用程序受到影响。