什么是.NET应用程序域?什么是.NET应用程序域?(What is a .NET applicat

2019-05-17 11:26发布

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

如何正常数据跨应用程序域边界传递? 它是一样的跨进程边界传递数据? 我很好奇,想知道更多关于这个抽象,它是有用的。

编辑:在AppDomain类的好现有的覆盖面一般在我不理解应用程序域

Answer 1:

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

一个简单的方法把它几乎就像一个轻量进程坐在你的主要过程的内部。 每个应用程序域在完全隔离的过程,它可以让你安全地运行的代码(它可以在不如果需要拆除的全过程被卸载)中存在的,单独的安全等

至于你的细节 - 如果你在一个进程中运行2个不同的应用程序域代码,该代码会独立运行。 在应用程序域之间的任何通信将获得无论是序列化或通过MarshallByRefObject处理。 它的行为很像在这方面使用远程处理。 这提供了一个巨大的安全量 - 你可以运行的代码,你不相信,如果做错了事,也不会影响到你。

有在MSDN的描述更多的细节应用程序域 。



Answer 2:

它是由.NET运行时提供的隔离层。 因此,应用程序域在一个进程与生活(1个流程可以有多个应用程序域),并且拥有自己的虚拟地址空间。

应用程序域是因为有用:

  • 他们是比全过程更便宜
  • 他们是多线程
  • 您可以阻止一个没有在这个过程中杀死一切
  • 资源/配置/等隔离
  • 每个应用程序域自身的安全运行水平


Answer 3:

如果从处理器内部细节角度去看待它,它设置了代码段(在CS)寄存器不同的值。 代码和CS:IP(指令指针)寄存器是一个是在由处理器执行的。

(我选择脱脂为了简洁页表相关的讨论)。

AppDomain中标记这个边界。 代码的安全性。

之所以给这个背景是为了摆脱这些种类的问题:1。(是使用管道或其他一些共享机制及不能直接作为CS跨两个应用程序域怎能访问资源:IP不能被设置为其他应用程序域。这仅仅是可以做到这一点的操作系统。不是CLR)

  1. 莫不是在应用程序域的多个线程。 技术上是可以作为CS值要在当前进程。 您可以更改IP通过跳转语句别的东西(函数调用/转到组合)

  2. 在两个不同的应用程序域两个线程可以进行通信(参照号点1)

  3. 在单一的应用程序域两个线程可以通信(是。参照点2)

IP的工作原理:这些情况其他几个组合可以通过CS怎么一点知识来回答。



Answer 4:

一个进程中运行每一个应用程序,应用程序域也是轻量级进程或我们可以说,其具有组件的组的逻辑单元(这是包含组件的组的容器),该存在的处理的内部在同一进程的隔离电平,这允许同一个进程中运行多个组件,并防止他们直接访问。

运行点网应用内的AppDomain:从应用程序域代码一旦任何点网运行的应用程序,操作系统外壳加载CLR到进程和新的AppDomain在同一个进程中创建并加载在创建AppDomain中的所有组件,现在将得到执行。

当自定义的AppDomain:我们可以创建自己的AppDomain,现在就是在这情况下,我们可以创建自己的AppDomain。 假设运行时,我们需要添加或删除的组件不中断运行的应用程序,然后我们可以创建自己的AppDomain。



文章来源: What is a .NET application domain?