AppDomain的寿命应该短还是长?

时间:2019-05-24 10:43:13

标签: c# appdomain

我正在开发一个应用程序扩展系统(插件),其中每个插件都应隔离到单独的AppDomain中。这项工作即将完成,但是还有一个重要的问题,关于AppDomain应该使用多长时间。

该系统在服务器端使用,它定期使用插件,假设它应该每十分钟调用一次每个插件。在这种情况下,考虑到AppDomain的各种开销,哪个更合适?

  1. 创建一次AppDomain实例,并在应用程序的整个生命周期中保持它们有效(因此,每个插件调用将进入每个插件相同的AppDomain)。
  2. 为每个插件调用创建Appdomain个实例,然后Unload个实例。

1 个答案:

答案 0 :(得分:1)

使用AppDomain.CreateDomain(...)

1)。为每个插件创建一个新的应用程序域,并在整个应用程序生命周期中将其保持活动状态

  • 优点:没有开销:创建应用程序域,在每次插件调用时加载.dll等
  • 缺点:所有应用程序域中的所有.dll在整个应用程序生存期内都在消耗内存;需要注意静态变量;通话之间没有沙箱操作(如果一个中断了应用程序域,则所有通话都会失败)

2)。为每个插件调用创建新的应用程序域,并在之后卸载

    优点:通话之间的沙箱;在通话之间释放内存
  • 缺点:用于创建应用程序域,在每次插件调用时加载.dll等的开销

如果每个插件有很多调用,并且有大量的.dll,请使用选项1

如果每个插件有很多调用,并且有少量的.dll,请使用选项2

如果每个插件调用次数很少,而.dll则很少,请使用选项2

如果您希望在通话之间进行沙箱操作,请使用选项2