.Net- 应用程序域

.Net 应用程序域 的作用就是建立一种逻辑上的隔离,使应用程序更加的稳定和可靠。
启动了CLR的进程至少会拥有三个应用程序域,一般程序不会显示的创建任何应用程序域。
这里写图片描述

Demo

  1. 简单创建一个命令行程序,子程序中新建一个程序域,编译并运行。
            AppDomainSetup setUpInfo = new AppDomainSetup();                      
            AppDomain newDomain = AppDomain.CreateDomain("My New Domain", null, setUpInfo);
            Console.WriteLine("Main method complete.Press Enter");
  1. 打开WinDbg,把程序附加进来,运行命令
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
!dumpdomain

这样就可以把所用的应用程序域显示出来

--------------------------------------
System Domain:      000007fee04befb0
LowFrequencyHeap:   000007fee04bf528
HighFrequencyHeap:  000007fee04bf5b8
StubHeap:           000007fee04bf648
Stage:              OPEN
Name:               None
--------------------------------------
Shared Domain:      000007fee04be9e0
LowFrequencyHeap:   000007fee04bf528
HighFrequencyHeap:  000007fee04bf5b8
StubHeap:           000007fee04bf648
Stage:              OPEN
Name:               None
Assembly:           0000000000b73330 [C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll]
ClassLoader:        0000000000b701a0
  Module Name
000007fede751000            C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

--------------------------------------
Domain 1:           00000000004b06c0
LowFrequencyHeap:   00000000004b0eb8
HighFrequencyHeap:  00000000004b0f48
StubHeap:           00000000004b0fd8
Stage:              OPEN
SecurityDescriptor: 00000000004b3020
Name:               ApplicationDomin.exe
Assembly:           0000000000b73330 [C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll]
ClassLoader:        0000000000b701a0
SecurityDescriptor: 000000000049ba40
  Module Name
000007fede751000            C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

Assembly:           0000000000b76fd0 [C:\Users\Jay\Documents\visual studio 2012\Projects\ConsoleApplication\ApplicationDomin\bin\Debug\ApplicationDomin.exe]
ClassLoader:        0000000000b769c0
SecurityDescriptor: 000000000049bc20
  Module Name
000007fe804740c0            C:\Users\Jay\Documents\visual studio 2012\Projects\ConsoleApplication\ApplicationDomin\bin\Debug\ApplicationDomin.exe

--------------------------------------
Domain 2:           0000000000b867e0
LowFrequencyHeap:   0000000000b86fd8
HighFrequencyHeap:  0000000000b87068
StubHeap:           0000000000b870f8
Stage:              OPEN
SecurityDescriptor: 0000000000b6d400
Name:               My New Domain
Assembly:           0000000000b73330 [C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll]
ClassLoader:        0000000000b701a0
SecurityDescriptor: 000000000049bfe0
  Module Name
000007fede751000            C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

  • 在JIT编译MSIL代码的过程中,JIT需要保存与编译过程相关的数据。如生成的机器代码和方法表等。LowFrequencyHeap中包含的是一些较少被访问的数据,HighFrequencyHeap中包含的是频繁访问的数据。SubHeap则包含了CLR执行互用性调用所用的辅助数据,如COM互用性和平台互用性。

应用程序域的功能

系统应用程序域

  • 创建共享应用程序域和默认应用程序域

  • 将mscorlib.dll 加载到共享应用程序域中

  • 记录其他的所有应用程序域

  • 记录字符串池中的字符串常量,允许任意字符串在每个进程中都存在一个副本

  • 初始化特定类型的异常,例如内存耗尽异常,栈溢出异常,执行引擎异

共享应用程序域

包含一些与应用程序无关的代码,mscorlib.dll 被加载进来,此外还有一些System空间的基本类型。大多数情况非用户代码会加载进来。也可以通过一些机制加载用户代码(如优化加载器)

默认应用程序域

所有的用户代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值