c# - 应用程序域用于什么?

标签 c# c++ appdomain

我大致了解 AppDomain 是什么,但我不完全了解 AppDomain 的用途。

我参与了一个基于大型服务器的 C#/C++ 应用程序,我想知道如何使用 AppDomains 来提高稳定性/安全性/性能。

特别是:

  • 我了解一个域中的故障或致命异常不会影响在同一进程中运行的其他应用程序域 - 这是否也适用于非托管/C++ 异常,甚至可能是堆损坏或其他内存问题。
  • AppDomain 之间的通信如何工作?
  • 使用 AppDomain 与简单地生成多个进程有何不同?

最佳答案

AppDomain 的基本用例是在托管第 3 方代码的环境中,因此不仅需要动态加载程序集还需要卸载它们

无法单独卸载程序集。因此,您必须创建一个单独的 AppDomain 来容纳可能需要卸载的任何内容。然后,您可以在必要时丢弃并重建整个 AppDomain。

顺便说一句,CLR 的任何功能都无法保护破坏堆的 native 代码。最终,CLR 是本地实现的并共享相同的地址空间。因此,该过程中的 native 代码可以在 CLR 的内部各处乱涂乱画!隔离表现不佳(即大多数) native 代码的唯一方法是在操作系统级别进行实际进程隔离。启动多个 .exe 进程并让它们通过某种 IPC 机制进行通信。

关于c# - 应用程序域用于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207053/

相关文章:

c# - 程序集无法在受限制的 AppDomain 中加载

c# - 在复选框更改事件上禁用表格行

c# - this.Dispose() 在关闭后不会释放 Form 使用的内存。

javascript - 如何从 JavaScript 调用通用 WebAPI 操作?

c++ - 虚拟析构函数 - C++

C++:std::cout 的顺序

c# - 将字节数组从 Unity 传递到 Android (C++) 进行修改

c++ - 整数(*p)[4]?

c# - 多个 Assembly.Load(Byte[]),相同的实例或泄漏?