c#:具有多个应用程序域的单个进程 VS 多个进程

Posted

技术标签:

【中文标题】c#:具有多个应用程序域的单个进程 VS 多个进程【英文标题】:c# : single process with multiple app domain VS multiple process 【发布时间】:2015-08-11 11:49:49 【问题描述】:

我目前有多个进程。他们都在做不同的任务。其中一些还托管 WCF 服务并与数据库交互。它们中的大多数都是多线程进程,执行一些繁重的任务。它们都需要一直启动(它们一起充当服务器)。一些进程还通过 CLI 与非托管代码交互。

最近我遇到了“具有多个应用程序域的单个进程”概念。我想知道这对我有什么好处吗?与多进程架构相比,这有什么限制和优势?

编辑:如果任何进程崩溃,则必须再次重新启动。目前有一个进程观察器。

【问题讨论】:

什么是某些进程崩溃? 他们必须重新启动。有一个进程观察器 我会把它作为单独的进程,你不希望一个进程能够删除其他进程。 【参考方案1】:

tldr:您有本机依赖项。如果您需要稳健性,请继续使用单独的进程。

在我看来,这主要取决于您是在运行纯 .Net 代码,还是具有本机依赖项:进程隔离将防止在本机崩溃的情况下出现全局故障(这可能会导致整个进程停止运行)。

非托管资源也是如此:如果您在某处发生非托管资源泄漏,则重新启动进程“修复”泄漏。但重启一个 appdomain 不会。

如果您只使用托管代码(这似乎不是您的情况),具有多个 appdomains 的单个进程是可以的,并且具有摆脱进程创建开销的优势(创建一个新的 AppDomains 更轻而不是创建进程)

【讨论】:

以上是关于c#:具有多个应用程序域的单个进程 VS 多个进程的主要内容,如果未能解决你的问题,请参考以下文章

具有多个侦听器的简单进程间通信

如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?

进程线程与应用程序域的区别

c#异步编程-线程

单个服务器进程可以监听多个端口吗?

单个 SetEvent() 能否触发多个 WaitForSingleObject()