在我们的服务器中,我们正在加载第三方程序集,它会创建自己的资源,如内存和线程。我们需要创建这个第三方插件的多个实例,并且随着实例数量的增加,我们服务器的内存和线程都会达到极限。
一种方法是将这个插件加载到不同的exes中,从而释放服务器资源。这将起作用,因为每个进程都将从其自己的资源池中获益。
问题是,如果我们使用AppDomain并隔离插件,它会提供类似于在资源可用性方面在不同进程中托管它的优势。
谢谢, 中号...
答案 0 :(得分:2)
我的经验是,流程比AppDomains更灵活,更稳定。与进程相比,AppDomain存在一些致命的限制:
答案 1 :(得分:2)
AppDomain不享受操作系统提供的新“资源空间”。例如,在创建新的AppDomain时,可用内存空间不会扩大,这可能是对32位系统的限制。出于同样的原因,导致进程死亡的错误(如内存不足)将导致进程中的所有AppDomain一起死亡,因此未捕获的异常也是如此。使用进程时,这是绝对错误的。
然而,.NET确实将AppDomain作为外国单位处理。例如,对每个AppDomain执行垃圾收集,因此AppDomain的一个GC线程不会干扰不同的AppDomain。它可能会通过降低AppDomains之间的依赖关系来影响AppDomains消耗的CPU时间资源(尽管我从未试图检查它对它的影响程度)。
从您的问题来看,听起来过程是首选解决方案,因为您希望每个插件都有不同的资源池,但答案取决于您所谈论的资源类型。