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

Posted

技术标签:

【中文标题】在不同的 AppDomain 中执行代码以扩展应用程序内存【英文标题】:Execute code in different AppDomain to extent application memory 【发布时间】:2016-02-27 10:01:52 【问题描述】:

我的问题是我使用的是 32 位应用程序,所以我的内存使用量有限。 我需要并行执行一段需要大量内存的代码(使用一些数据库),我想在不同的进程中运行这段代码(如果我没记错的话,每个进程都会使用大约 2 GB 的内存)另一个优势进程的任何崩溃都不会影响应用程序。 我想知道 Appdomain 是否真的不与主应用程序共享内存? 如果是这样,这个解决方案会帮助我吗? Executing Code in a Separate Application Domain Using C#

【问题讨论】:

【参考方案1】:

应用程序域确实使用主应用程序内存,但是一旦卸载应用程序域,所有内存都会被回收,但是创建和卸载应用程序域会产生性能成本,如果应用程序域包含大量静态对象,它实际上会膨胀作为静态对象的进程的大小与应用程序域而不是进程相关联。见Understanding Application Domains。

如果您的应用程序的内存密集型部分运行时间有限,您可以从这种方法中受益,但是在单独的进程中运行将允许您使用更多的内存,特别是如果这是一个 x64 进程,但您可能需要以某种方式在两个进程之间进行通信。

您还可以通过池化和重用消耗大量内存的对象来减少应用程序的内存压力。

【讨论】:

【参考方案2】:

见Difference between AppDomain, Assembly, Process, and a Thread

据我所知,AppDomain 通常不会在单独的进程中运行;我认为这对你没有帮助。

为什么不直接产生一个新进程?

【讨论】:

以上是关于在不同的 AppDomain 中执行代码以扩展应用程序内存的主要内容,如果未能解决你的问题,请参考以下文章

C#里的应用程序域AppDomain

AppDomain 是不是在自己的线程中执行?

C# AppDomain 类

天蓝色功能横向扩展

防止代码被加载到另一个 AppDomain

IIS 中是不是需要 AppDomain?