![]() |
1
72
安 AppDomain 基本上提供了一个独立的区域,其中代码在进程内部运行。 一个简单的方法来考虑它几乎是一个重量较轻的过程坐在你的主要过程。每个AppDomain都存在于一个完全隔离的进程中,它允许您安全地运行代码(如果需要,可以在不破坏整个进程的情况下卸载代码),并具有单独的安全性等。 至于您的具体情况——如果您在一个进程中的两个不同的AppDomain中运行代码,那么代码将单独运行。AppDomain之间的任何通信都将通过MarshallByRefObject进行序列化或处理。在这方面,它的行为非常类似于使用远程处理。这提供了大量的安全性——您可以运行您不信任的代码,如果它出错,它将不会影响您。 在msdn关于 Application Domains . |
![]() |
2
19
它是.NET运行时提供的隔离层。因此,应用程序域在一个进程中(1个进程可以有多个应用程序域),并有自己的虚拟地址空间。 应用程序域很有用,因为:
|
![]() |
3
1
如果从处理器内部细节的角度来看,它会为代码段(CS)寄存器设置不同的值。code和cs:ip(指令指针)寄存器是处理器正在执行的寄存器。 (为了简洁起见,我选择了浏览与表格相关的讨论)。 AppDomain标记此边界。为了代码安全。 提供这种背景的原因是为了回避这类问题: 1.我们如何在两个应用程序域之间访问资源(是的,使用管道或其他共享机制,而不是直接作为cs:ip设置为其他应用程序域)。只有操作系统能做到这一点。不是clr)
对cs:ip的工作原理知之甚少,可以回答这些案例的其他几种组合。 |
![]() |
4
0
在一个进程中运行的每个应用程序,AppDomain也是一个轻量级的进程,或者我们可以说逻辑单元,它具有一组程序集(这是一个包含程序集组的容器),并且它存在于同一进程的隔离级别的进程中,这允许在同一进程中运行多个程序集并阻止它们直接进入。 在AppDomain中运行DOT NET应用程序: 一旦任何一个点网应用程序运行,操作系统shell会将clr加载到一个进程中,并在同一进程中创建新的appdomain,然后从appdomain代码中加载创建的appdomain中的所有程序集。 何时自定义AppDomain: 我们可以创建自己的AppDomain,现在的情况是我们可以在哪个场景中创建自己的AppDomain。假设运行时我们需要在不中断正在运行的应用程序的情况下添加或删除程序集,那么我们可以创建自己的AppDomain。 |
![]() |
Rob · 如何将AppDomain序列化到磁盘 11 年前 |
![]() |
user2341923 · 进程内存与应用程序域内存分配 11 年前 |
![]() |
Scott · 在第二个AppDomain中运行服务 12 年前 |