Appdomain 与进程的性能优势?

Posted

技术标签:

【中文标题】Appdomain 与进程的性能优势?【英文标题】:Performance benefits of Appdomain vs process? 【发布时间】:2010-12-28 08:08:41 【问题描述】:

我有一个 C# 应用程序 (foo),我从中调用另一个 C# 应用程序 (bar)。目前我正在通过使用 C# 的 Process 类创建新进程来从 foo 应用程序调用 bar 应用程序。

最近我开始了解 .net AppDomains。我想知道使用 AppDomains 代替进程是否有任何性能优势?

感谢和问候,

【问题讨论】:

【参考方案1】:

在 Windows 中,简单地创建一个新进程会产生一些不小的开销,是的。这就是 CGI 历来在 Windows 上的性能不如在其他操作系统上的原因(也是开发 FastCGI 的一个重要原因)

但是,我想问一下,您多久会创建这些额外的“工作”?如果它会非常频繁,是否有理由不能简单地使用线程池线程?如果它根本不经常发生,那么与您花在弄清楚如何让它发挥作用所花费的时间相比,您获得的好处将是微不足道的。


IMO,单独的 AppDomain 往往有一些特定情况需要在整个进程或简单线程上使用它们。通常最好选择一种方式。

【讨论】:

创建新进程的频率很低。这取决于软件的用户。那么在这种情况下我们应该使用 AppDomain 还是进程呢?你有什么建议? 我认为您从使用 AppDomain 获得的系统资源收益不值得您从使用更简单的方式获得的开发人员资源收益。也就是说:你将花费更多的时间来弄清楚如何让它在 AppDomain 中正确运行,而不是通过这样做在服务器上节省。【参考方案2】:

在 .net 框架中创建进程不是托管进程,CLR 必须咨询底层操作系统来启动新进程,并且启动新进程有一些已定义的步骤,因此可能会有一些性能下降,但有多少,有没有测量。

但是,如果您将 DLL 加载到新的 AppDomain 中,它将位于您的应用程序进程中,并且不需要完整的闪存进程集。

那要看你怎么样了

【讨论】:

以上是关于Appdomain 与进程的性能优势?的主要内容,如果未能解决你的问题,请参考以下文章

从 appdomain 中解包不可序列化的类

关于进程线程应用程序域(AppDomain)

在不同的 AppDomain 中执行代码以扩展应用程序内存

C#:进程线程应用程序域(AppDomain)与上下文分析

在 AppDomain 中启动 .NET 进程

AppDomains之间如何最好地进行通信?