在不同的 AppDomain 中执行代码以扩展应用程序内存
Execute code in different AppDomain to extent application memory
我的问题是我使用的是 32 位应用程序,所以我的内存使用量有限。
我需要执行一段需要并行内存的代码(使用一些数据库),我想 运行 不同进程中的这段代码(如果我没记错的话,每个进程获得大约 2 GB 的内存用法)另一个优点是任何进程崩溃都不会影响应用程序。
我想知道 Appdomain 是否真的不与主应用程序共享内存?
如果是这样,这个解决方案对我有帮助吗?
Executing Code in a Separate Application Domain Using C#
见Difference between AppDomain, Assembly, Process, and a Thread
据我所知,AppDomain 通常 运行 在一个单独的进程中;我不认为这对你有帮助。
为什么不直接生成新进程?
应用程序域确实使用主应用程序内存,但是一旦应用程序域被卸载,所有内存都会被回收,但是应用程序域的创建和卸载会产生性能成本,如果应用程序域包含大量静态对象,它实际上可以增加进程的大小,因为静态对象绑定到应用程序域而不是进程。参见 Understanding Application Domains。
如果您的应用程序的内存密集型部分运行时间有限,您可以从这种方法中获益,但是 运行 在单独的进程中将允许您使用更多内存,尤其是在这种情况下一个 x64 进程,但您可能需要以某种方式在两个进程之间进行通信。
您还可以考虑通过池化和重用消耗大量内存的对象来降低应用程序的内存压力。
我的问题是我使用的是 32 位应用程序,所以我的内存使用量有限。 我需要执行一段需要并行内存的代码(使用一些数据库),我想 运行 不同进程中的这段代码(如果我没记错的话,每个进程获得大约 2 GB 的内存用法)另一个优点是任何进程崩溃都不会影响应用程序。 我想知道 Appdomain 是否真的不与主应用程序共享内存? 如果是这样,这个解决方案对我有帮助吗? Executing Code in a Separate Application Domain Using C#
见Difference between AppDomain, Assembly, Process, and a Thread
据我所知,AppDomain 通常 运行 在一个单独的进程中;我不认为这对你有帮助。
为什么不直接生成新进程?
应用程序域确实使用主应用程序内存,但是一旦应用程序域被卸载,所有内存都会被回收,但是应用程序域的创建和卸载会产生性能成本,如果应用程序域包含大量静态对象,它实际上可以增加进程的大小,因为静态对象绑定到应用程序域而不是进程。参见 Understanding Application Domains。
如果您的应用程序的内存密集型部分运行时间有限,您可以从这种方法中获益,但是 运行 在单独的进程中将允许您使用更多内存,尤其是在这种情况下一个 x64 进程,但您可能需要以某种方式在两个进程之间进行通信。
您还可以考虑通过池化和重用消耗大量内存的对象来降低应用程序的内存压力。