什么是.NET应用程序域?

Luk*_*uke 81 .net appdomain

特别是,在两个不同的应用程序域中运行代码的含义是什么?

数据如何通过应用程序域边界传递?是否与跨过程边界传递数据相同?我很想知道更多有关这种抽象及其有用的内容.

编辑:一般在AppDomain类的良好现有覆盖范围,我不了解应用程序域

Ree*_*sey 74

一个应用程序域基本上提供了其中代码的过程的内部运行的分离的区域.

一种简单的方法来考虑它几乎就像一个轻量级的过程坐在你的主要过程中.每个AppDomain都存在于完全隔离的进程中,这使您可以安全地运行代码(可以在不拆除整个过程的情况下卸载代码),具有单独的安全性等.

至于您的具体情况 - 如果您在进程中的2个不同AppDomain中运行代码,代码将单独运行.AppDomains之间的任何通信都将被序列化或通过MarshallByRefObject处理.它在这方面非常像使用远程处理.这提供了大量的安全性 - 您可以运行您不信任的代码,如果它出错了,它不会影响您.

MSDN对应用程序域的描述中有更多详细信息.

  • 一个例子:如果你在线程池中有一个未处理的线程,它将拆除app域.通常,这会终止您的进程 - 如果您正在加载用户代码或插件,这将是危险的.在一个单独的appdomain中运行意味着你可以更好地处理 - 如果必须拆除第二个AppDomain,你可以处理它而不会破坏你的进程. (10认同)

nik*_*d23 20

它是.NET运行时提供的隔离层.因此,App域存在于一个进程中(1个进程可以有许多应用程序域)并拥有自己的虚拟地址空间.

应用域很有用,因为:

  • 它们比完整流程便宜
  • 它们是多线程的
  • 您可以在不杀死过程中的所有内容的情
  • 隔离资源/配置/等
  • 每个应用程序域都在自己的安全级别上运行