我对下面的陈述感到困惑,该陈述取自What ASP.NET Programmers Should Know About Application Domains :
您已经创建了两个ASP.NET 同一台服务器上的应用程序 没有做任何特别的事 组态。发生了什么事?
单个ASP.NET辅助进程将 托管两个ASP.NET应用程序。 在Windows XP和Windows 2000上 进程名为aspnet_wp.exe,并且 该过程在安全性下运行 本地ASPNET帐户的上下文。 在Windows 2003上,工作进程具有 名称w3wp.exe并在其下运行 默认情况下,NETWORK SERVICE帐户。
他说有一个工作进程产生2个应用程序域 - 每个asp.net应用程序有一个应用程序域。
但是当我看到正在运行的进程如下时,
图片1
图片2
w3wp.exe
被称为IIS工作进程而不是应用程序池或应用程序域。
Host Process Windows Service svchost.exe
会产生2 IIS Worker Process w3wp.exe
?据我了解,一个进程只能包含应用程序域,而不能包含其他进程。答案 0 :(得分:2)
Application domain aka AppDomain(其类表示)是.NET运行时内的封装环境,其中装配和运行程序集。
通常每个托管流程都有一个AppDomain / Application域,但可以更多。这篇文章引用了同一个w3wp3.exe进程中的2个AppDomain。
您可以使用perfmon.exe
查看在任何进程中加载的AppDomain数量要回答您的问题,通常每个AppPool会创建一个AppDomain。但是可以通过应用程序在AppPool中手动加载额外的AppDomain - 但这种情况非常罕见。
我认为您正在使用Sysinternals的Process Explorer。忽略它在那里显示树结构的方式,它只说明哪个进程有生成其他进程。事实上,它显示了资源管理器下面的大多数进程,因为资源管理器已用于加载它。
此外,SVCHOST.exe是一个非托管可执行文件,虽然它可以托管CLR并加载AppDomains,但它通常不会这样做。