首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是.NET应用程序域?

什么是.NET应用程序域?
EN

Stack Overflow用户
提问于 2009-07-07 19:55:51
回答 4查看 48.5K关注 0票数 88

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

数据通常是如何跨越应用程序域边界传递的?这是否等同于跨进程边界传递数据?我很想知道更多关于这个抽象的信息,以及它有什么用。

EDIT:I don't understand Application Domains上对AppDomain类的良好现有覆盖率

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-07 20:00:11

AppDomain基本上提供了一个隔离的区域,在其中代码在进程内运行。

一种简单的方式是,它几乎就像一个位于主进程中的轻量级进程。每个AppDomain都以完全隔离的方式存在于进程中,这允许您安全地运行代码(如果需要,可以在不拆卸整个进程的情况下卸载它),具有单独的安全性等。

至于您的具体要求--如果您在一个进程内的两个不同的AppDomains中运行代码,那么代码将独立运行。AppDomains之间的任何通信都将通过MarshallByRefObject进行序列化或处理。在这方面,它的行为非常类似于使用远程处理。这提供了巨大的安全性-你可以运行你不信任的代码,即使它做错了什么,它也不会影响你。

在MSDN对Application Domains的描述中有更多的细节。

票数 84
EN

Stack Overflow用户

发布于 2009-07-07 20:03:57

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

应用程序域非常有用,因为:

multithreaded

  • You process

  • Segregation of resources/config/etc

  • Each应用程序域在其自身的安全级别上运行时,
  • 它们比完整进程更便宜
  • 可以停止一个进程而不会终止所有内容
票数 22
EN

Stack Overflow用户

发布于 2014-02-26 16:10:53

如果从处理器内部详细信息的角度来看,它会为代码段( CS)寄存器设置不同的值。代码和CS:IP (指令指针)寄存器是处理器正在执行的寄存器。

(为简洁起见,我选择略读与页表相关的讨论)。

AppDomain标记了这一边界。为了代码安全。

给出这个背景的原因是为了解决这些问题: 1.我们如何跨两个应用程序域访问资源(是的,使用管道或其他共享机制不能直接,因为CS:IP不能设置为其他应用程序域。只有操作系统可以做到这一点。而不是CLR)

  1. 应用程序域中可能有多个线程。技术上是肯定的,因为CS值将在当前进程中。您可以通过跳转语句将IP更改为其他内容(function call/goto combination)
  2. can两个不同应用程序域中的线程通信(No.参考点1。)
  3. 可以在单个应用程序域中的两个线程之间进行通信(可以。参考要点2)

这些案例的其他几个组合可以通过对CS:IP如何工作的少量知识来回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1094478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档