为了提升windows系统的稳定性与可靠性,windows通过进程来实现。所有的可执行代码、数据以及其他资源都被包含在进程中,
不允许其他进程对它进行访问(除非有足够的权限)。对于.NET应用程序,还进一步引入另一种隔离机制AppDomain。
CLR加载的时候将创建三个AppDomain:系统应用程序域、共享应用程序域以及默认应用程序域。使用WinDbg.exe和!dumpdomain
命令可以看到CLR创建的应用程序域如下:
0:000> .loadby sos.dll clr
0:000> !dumpdomain
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
PDB symbol for clr.dll not loaded
--------------------------------------
System Domain: 50820f60
LowFrequencyHeap: 50821284
HighFrequencyHeap: 508212cc
StubHeap: 50821314
Stage: OPEN
Name: None
--------------------------------------
Shared Domain: 50820c08
LowFrequencyHeap: 50821284
HighFrequencyHeap: 508212cc
StubHeap: 50821314
Stage: OPEN
Name: None
Assembly: 00726b38 [C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll]
ClassLoader: 0072a3b8
Module Name
79571000 C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

--------------------------------------
Domain 1: 006d7000
LowFrequencyHeap: 006d7454
HighFrequencyHeap: 006d749c
StubHeap: 006d74e4
Stage: OPEN
Name: CApp.exe
Assembly: 00726b38 [C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll]
ClassLoader: 0072a3b8
SecurityDescriptor: 00726aa0
Module Name
=79571000 C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

在进程中有三个应用程序域:System、Shared、Domain 1。这个三个程序域的主要作用:
1、系统应用程序员
1)创建其他两个应用程序域(共享应用程序域和默认应用程序域)
2)将mscorlib.dll加载到共享应用程序域中
3)记录进程中所有其他的应用程序域,包括提供加载/卸载应用程序域等功能
4)记录字符串池中的字符串常量,因此允许任意字符串在每个进程中都存在一个副本。
5)初始化特定类型的异常,例如内存耗尽异常等
2、共享应用程序域
在共享应用程序域中包含与应用程序域无关的代码。mscorlib.dll将被加载到应用程序域中,
此外还包含在System命名空间中的一些基本类型。

3、默认应用程序域
.NET程序在默认应用程序域中运行。位于默认应用程序域中的所有代码都只有在这个域才是有效的。
任何跨域应用程序域的访问操作都必须通过.NET远程对象来进行。

宿主如何使用AppDomain?
1、可执行应用程序
控制台UI应用程序、NT Service应用程序、windows窗体应用程序和 WPF应用程序都是自寄宿应用程序的例子。
它们都有托管EXE文件。
2、ASP.NET web窗体和web应用程序
ASP.NET作为一个ISAPI DLL(ASPNet_ISAPI.dll)实现。客户端首次请求一个由ASP.NET ISAPI DLL处理的URL时,
ASP.NET会加载CLR。客户端请求一个web应用程序时,ASP.NET判断这是不是第一次请求。
如果是,ASP.NET会告诉CLR为该WEB应用程序创建一个新的AppDomain。每个web应用程序都按照它的虚拟根目录来标识。

.NET 应用程序域?的更多相关文章

  1. 【.net 深呼吸】跨应用程序域执行程序集

    应用程序域,你在网上可以查到它的定义,凡是概念性的东西,大伙儿只需要会搜索就行,内容看了就罢,不用去记忆,更不用去背,“名词解释”是大学考试里面最无聊最没水平的题型. 简单地说,应用程序域让你可以在一 ...

  2. .NET应用程序域

    在.NET平台下,可执行程序并没有直接承载在Windows进程中,而非托管程序是直接承载的..NET可执行程序承载在进程的一个逻辑分区中,称之为应用程序域(AppDomain).一个进程可以包含多个应 ...

  3. 读 《.Net 之美》解析.Net Remoting (应用程序域)-- Part.1

    读 <.Net 之美>解析.Net Remoting (应用程序域)-Part1 理解 .Net Remoting 前言: 看张子阳老师的文章,总是给自己很大的信心,这个专题基本上以张老师 ...

  4. 跨应用程序域(AppDomain)的单例(Singleton)实现

    转载自: 跨应用程序域(AppDomain)的单例(Singleton)实现 - CorePlex代码库 - CorePlex官方网站,Visual Studio插件,代码大全,代码仓库,代码整理,分 ...

  5. C#学习笔记----AppDomain应用程序域

    使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级 ...

  6. [转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

  7. [ActionScript 3.0] AS3.0 Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain

    实际应用中, Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain,需要择情况而定. 1.如果在本地将项目位置添加到flashplayer受信任位置(上一篇文章所述) ...

  8. [ActionScript 3.0] AS3 深入理解Flash的 应用程序域Application Domains

    简介 网上有很多flash,通常都不需要显示的使用应用程序域,因为默认的应用程序域就够用了.其实复杂的情况下需要用到应用程序域,比如说有两个不同的swf,一个是旧版本的,一个是新版的,这两个文件里的类 ...

  9. 应用程序域(Application Domain)

    应用程序域为隔离正在运行的应用程序提供了一种灵活而安全的方法. 应用程序域通常由运行时宿主创建和操作. 有时,您可能希望应用程序以编程方式与应用程序域交互,例如想在不停止应用程序运行的情况下卸载某个组 ...

  10. AppDomain 应用程序域

    应用程序域 一.什么是应用程序域? 应用程序域 (application domain) (AppDomain) 一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点 ...

随机推荐

  1. AngularJS Source code

    Angular.js 辅助函数 lowercase hasOwnProperty uppercase mannualLowercase mannualUppercase isArrayLike for ...

  2. 解决com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes异常

    错误截图: 解决方法: 用root进入mysql终端,执行以下命令: alter database hive character set latin1;

  3. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  4. BZOJ1484 [HNOI2009]通往城堡之路

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  5. sklearn学习笔记之岭回归

    岭回归 岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息.降低精度为代价获得回归系数更为符合实际.更可靠的回归方法,对病 ...

  6. PHP服务器变量$_SERVER

    常用的就几个,自己print_r($_SERVER); 看看. $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv ...

  7. 绘制三角形(sass)

    绘制三角形 /// draw triangle/// @param {type} $type [''] - triangleUp triangleDown triangleLeft triangleR ...

  8. spring3: Aspectj后置返回通知

    Aspectj后置返回通知 接口: package chapter1.server; public interface IHelloService2 { public int sayAfterRetu ...

  9. hdu2586倍增lca

    求距离 #include<map> #include<set> #include<cmath> #include<queue> #include< ...

  10. 常见CSS浏览器兼容性问题与解决方案【转载自http://blog.csdn.net/chuyuqing/article/details/37561313/】

    所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的 ...