为了提升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. Book Review of “The practice of programming” (Ⅲ)

    The practice of programming Chapter 3 Design and Implementation In this section, we focus on one kin ...

  2. adplayer移植【转】

    本文转载自:https://blog.csdn.net/qq361294382/article/details/50525412 这两天做madplayer移植,由于是刚装的ubuntu14.04,所 ...

  3. Spring_事务(1)

  4. 谈谈对Canal(增量数据订阅与消费)的理解

    概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...

  5. [POI2006]MET-Subway

    Description 给出一棵N个结点的树,选择L条路径,覆盖这些路径上的结点,使得被覆盖到的结点数最多. Input 第一行两个正整数N.L(2 <= N <= 1,000,000, ...

  6. eclipse中去掉警告提示

    有时候我们要去掉这些不必要的提示 下面我们来设置去掉这些警告提示

  7. Spring -- 如何为applicationContext.xml 添加 util 的 *.xsd文件

  8. java接口调试思想

    对于接口调试的理解:最近多次参与接口调试工作,一般情况都是获取对方接口文档,文档中有加密验证方式,根据加密验证方式开发,调用对应的接口.可以不可以简化这个流程那,至少减少一方的工作量.1.减少调用方法 ...

  9. 智课雅思词汇---二十五、-ate

    智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...

  10. python作业大纲分析

    2018-11-22 目前自学python这么久,零零散散的写了几次作业,下面是几个在完成过程中遇到困难较多的作业. 1.ATM+购物车系统 需求: 1.额度 15000或自定义  2.实现购物商城, ...