有关.NET应用程序域的问题

时间:2010-10-13 08:18:34

标签: .net clr

我知道一旦启动了.NET应用程序,CLR会自动创建3个应用程序域,它们是系统域,共享域和默认域。

系统域:

  • 创建共享&默认域名
  • 提供加载和卸载应用程序域的功能
  • 将mscorlib.dll加载到共享域
  • 所有其他域名的簿记
  • 记录实习字符串文字
  • 预先创建某些类型的异常,例如内存不足异常,堆栈溢出异常等。

共享域名:

  • 包含域中性代码。
  • 包含基本类型,如String,enum,Int32等。

默认域名:

  • .NET应用程序代码在其中运行。

以下是关于它们的几个问题:

  • 这3个域名的关系是什么?有层次结构还是什么?根据系统域的职责,我认为进程中的AppDomain应该像逻辑上的一样组织(或者可能在物理上在内存中),树的根是系统域,并且所有其他领域都是它的孩子。

  • “实习字符串”是什么意思?一些例子可能会更好。

  • AppDomain用于隔离,跨域通信并不容易。所以我想知道,因为基本类型包含在共享域而不是默认域或任何其他可以运行代码的AppDomain中,所以我相信CLR必须唯一地处理共享域以进行简单的跨域通信。这是真的吗?

感谢。

1 个答案:

答案 0 :(得分:3)

我要添加一个评论而不是答案,但我不允许发表评论。遗憾。

跨AppDomain内存访问(与远程处理相反)很困难,并且是由设计完成的。

如果你想要一个跨域单身人士,我找到了this little gem