为了提升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. 2018-2019-2 20165114《网络对抗技术》Exp2 后门原理与实践

    目录 一.实验准备 二.实验内容 三.基础问题回答 四.实验过程及步骤 五.实验总结与体会 六.实验中遇到的问题与错误. 一.实验准备 1.后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里 ...

  2. Git常用分支操作

    新建分支 git branch branchname 切换到分支dev git checkout branchname 查看所有的分支信息 git branch -a 查看远程分支信息 git bra ...

  3. centos 6的LAMP一键安装包(可选择/升级版本)

    安装步骤 事前准备(安装 wget.screen.unzip,创建 screen 会话) yum -y install wget screen git git clone 并赋予脚本执行权限 git ...

  4. 获取微信公众号用户的基本信息(UnionID机制)

    获取用户基本信息(UnionID机制) 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的open ...

  5. Docker入门使用

    先来一波docker的指令:      docker inspect 容器id  查询容器信息      docker stop  容器id  停止容器id      docker rm  容器id ...

  6. LeetCode——Longest Consecutive Sequence

    LeetCode--Longest Consecutive Sequence Question Given an unsorted array of integers, find the length ...

  7. 3.scala容器

    3.scala容器 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-o ...

  8. Android -- 读写文件到内部ROM,SD卡,SharedPreferences,文件读写权限

    (内容整理自张泽华教程) 1. 概述 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过 ...

  9. spring mvc:文本框

    采用:<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> ...

  10. jfinal微信支付

    private static final String appid = PropKit.get("appid"); //应用ID private static final Stri ...