appdomain概念与应用
用appcmd命令显示w3wp.exe进程,很多时候一个应用程序池负责创建一个w3wp.exe进程与之对应,可能还有时候是创建多个w3wp.exe,有待验证。
c:\Windows\System32\inetsrv>appcmd list wp
WP "" (applicationPool:ASP.NET v4.)
WP "" (applicationPool:website test1)
实验目的:对于一个固定的应用程序池,有多个应用程序都绑定到它上面,
实验步骤:步骤Default Web Site下面创建三个应用程序,他们都指定这个应用程序池,那么怎么理解应用程序这个概念?
应用程序对应.net里的应用程序域appdomain,可以把当前的进程,当前进程所有的应用程序域都打印出来。
Process.GetCurrentProcess().ProcessName=w3wp
||DefaultDomain||
||/LM/W3SVC//ROOT/WebApplication3--||
||/LM/W3SVC//ROOT/WebApplication2--||
||/LM/W3SVC//ROOT/WebApplication1--||
这三个IIS应用程序域都在相同的进程w3wp内,他们对应进程内的三个应用程序域WebApplication1,WebApplication2,WebApplication3
打印应用程序域的示例代码:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write($"Process.GetCurrentProcess().ProcessName={Process.GetCurrentProcess().ProcessName}\r\n");
Response.Write(GetAllAppDomains());
} public static string GetAllAppDomains()
{
//AppDomain one = AppDomain.CreateDomain("One");
//AppDomain two = AppDomain.CreateDomain("Two"); // Creates 2 app domains
List<AppDomain> appDomains = new List<AppDomain>();
IntPtr enumHandle = IntPtr.Zero;
var host = new CorRuntimeHostClass();
StringWriter writer = new StringWriter(); try
{
host.EnumDomains(out enumHandle);
object domain = null;
AppDomain tempDomain; while (true)
{
host.NextDomain(enumHandle, out domain);
if (domain == null)
{
break;
} tempDomain = domain as AppDomain;
appDomains.Add(tempDomain);
}
}
catch (Exception ex)
{
writer.WriteLine(ex.ToString());
}
finally
{
host.CloseEnum(enumHandle);
int rel = Marshal.ReleaseComObject(host);
} Assembly[] assemblies; foreach (AppDomain app in appDomains)
{
writer.WriteLine();
writer.WriteLine($"||{app.FriendlyName}||");
//assemblies = app.GetAssemblies();
//writer.WriteLine("-----------------------Assemblies------------------"); //foreach (Assembly assem in assemblies)
//{
//writer.WriteLine(assem.FullName);
//} //writer.WriteLine("---------------------------------------------------");
//writer.WriteLine();
} return writer.ToString();
}
}
参考:
http://www.cnblogs.com/foman/archive/2009/10/18/1585655.html
http://blog.csdn.net/minsenwu/article/details/38391621
http://www.cnblogs.com/HopeGi/p/6422357.html
http://www.cnblogs.com/awpatp/archive/2009/11/24/1609570.html
appdomain概念与应用的更多相关文章
- C#基础--应用程序域(Appdomain)
AppDomain理解 为了保证代码的键壮性CLR希望不同服务功能的代码之间相互隔离,这种隔离可以通过创建多个进程来实现,但操作系统中创建进程是即耗时又耗费资源的一件事,所以在CLR中引入了AppDo ...
- 浅谈.NET中AppDomain的理解
一.走进.NET AppDomain 天哪,.NET Framwork的CLR真是巧妙呢!随着越来越多的对.Net底层编程的了解,一些诸如架构,处理过程的复杂难懂的细节完全的让我叹服,所以呢,再次错过 ...
- AppDomain 详解(转)
AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制. 每一个AppDomain可以单独运行.停止:每个AppDo ...
- 【C#进阶系列】22 CLR寄宿和AppDomain
关于寄宿和AppDomain 微软开发CLR时,将它实现成包含在一个DLL中的COM服务器. 任何Windows应用程序都能寄宿(容纳)CLR.(简单来讲,就是CLR在一个DLL中,通过引用这个DLL ...
- C# .NET 基本概念
1. private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以访问. protected : 保护成员, ...
- C#学习笔记----AppDomain应用程序域
使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级 ...
- CLR via C#深解笔记一 - CLR & C# 基础概念
写在前言 .Net Framework并不是Win 32 API 和COM上的一个抽象层. 某种程度上,它是自己的操作系统,有自己的内存管理器,自己的安全系统,自己的文件加载器,自己的错误处理 ...
- C#学习笔记-----基于AppDomain的"插件式"开发
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...
- .NET概念:.NET程序编译和运行
.NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...
随机推荐
- [书籍翻译] 《JavaScript并发编程》第六章 实用的并发
本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript ...
- svg-sprite-loader ( svg-icon) 使用
svg-sprite-loader 可以多个svg图标合并. 使用时只需根据合并的symbol的id即可. <svg class="svg-icon" aria-hidde ...
- tornado 常见问题处理
1 怎么获取从页面中的传值 使用 self.get_body_argument tornado的参数存储在self.request.body内,通过json以后就可以直接取值,当初我在前端使用angu ...
- Grassfire算法- 运动规划(Motion planning)
Grassfire算法: 一.概念 这个算法是做图像处理的抽骨架处理,目的是求出图像的骨架,可以想象一片与物体形状相同的草,沿其外围各点同时点火.当火势向内蔓延,向前推进的火线相遇处各点的轨迹就是中 ...
- Win7升级Win10系统提示错误0x80070057的解决方法
Win7系统用户在通过Windows Update来升级Win10系统时,有时会出现0x80070057的错误代码从而导致无法继续升级.下面好系统重装助手就来告诉大家Win7升级Win10系统出现0x ...
- Linux学习笔记(六)Linux常用命令:关机、重启以及系统运行级别
一.shutdown命令 shutdown [选项] [时间] 常用选项 -c 取消前一个关机命令 -h 关机 -r 重启 shutdown命令关机或重启会保存当前系统正在使用的资源,因此关机或重启最 ...
- 1.caffe初入
1.FrameWork of Caffe Caffe是一种编程框架,内部提供了一套编程机制,或者说一个模板框架,用以实现GPU并行架构下的机器学习,DeepLearing等算法,能在性能上大幅度提升, ...
- Navicate 12 for mysql
先下载安装好 navicat工具,在下载下面的工具 链接:https://pan.baidu.com/s/1Y-IOrbnhvhlS6Y3lpABLQg密码: nktc 选其中的一个 请根据自己安装N ...
- 开启树莓派自带的VNC功能
前期准备 树莓派可以连接路由器或连上wifi,我用的是自己的小米路由器,目的是为了获取内网IP 工具准备 下载 vnc viewer https://www.realvnc.com/en/connec ...
- JavaScript查漏补缺
js函数定义的三种方式: 函数声明 function sum(a,b){ return a+b } 函数表达式 var sum = function(a,b){ return a+b } Functi ...