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 ...
随机推荐
- K2 BPM_快消零售连锁行业门店选址解决方案_十年专注业务流程管理系统
>>>业务流程管理软件选型攻略 快消零售连锁行业门店选址解决方案 业内有句名言:“门店最重要的是什么?第一是选址,第二是选址,第三还是选址” 选址是一个很复杂的综合性商业决策过 ...
- Python3+Appium学习笔记09-元素定位android_uiautomator
appium是使用了uiautomator的框架的,所以uiautomator所带的定位方式.appium也是支持的 需要使用appium中find_element_by_android_uiauto ...
- 单元测试框架之unittest(五)
一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...
- Java abstract类的基本使用 和 [abstract类实现]打印1000以内的所有素数并输出时间
笔记: /** 关键字abstract ,实现抽象类,相当于给出类的大纲,子类只管继承,但抽象类不可被实例化! * 1.抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写所有的抽 ...
- golang 2 ways to delete an element from a slice
2 ways to delete an element from a slice yourbasic.org/golang Fast version (changes order) a := []st ...
- Linux系统进程的知识总结,进程与线程之间的纠葛...
来源:嵌入式ARM 当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我 ...
- Spring-使用注解开发
8.使用注解开发 在Spring4之后,要使用注解开发,必须要保证AOP包已经导入了 使用注解需要导入context约束,增加注解的支持! <?xml version="1.0&quo ...
- 如何比较js 浮点数
浮点数的定义,非整数的Number类型无法用 ==(===也不行) 来比较,这就是为什么在JavaScript中,0.1+0.2不能=0.3: console.log( 0.1 + 0.2 == 0. ...
- mysql 数据库练习题
前面学习了MySQL的语句的基本用法,这里就开始做一些MySQL练习,这套题目一共45题,属于比较简单的,初学先试着做这个. 参考链接:https://www.cnblogs.com/SJP666/p ...
- [Luogu P1658] 购物
题目链接 这道题的主要思想是贪心. 题目的要求用几个硬币将1~x的数都能够凑出的最少硬币个数.这里注意一下是都凑出而不是同时凑出. 先讨论什么时候无解.所有的自然数都可以用1堆砌而成.换而言之只要有1 ...