所有的Windows应用程序都在一个进程里运行。进程拥有自己的像内存和核心对象这样的资源,同时线程则执行加载到进程里的代码。在同一个操作系统中,不同的进程间是互不干扰的,因此一个进程不可能意外地影响另外一个进程里的应用程序的执行。为了让多个应用程序运行在同一台计算机上,这种互不干扰是最基本的要求,这种安全要求不管某个应用程序发生了什么情况(甚至崩溃),都不会影响其它应用程序的运行。进程提供了很好的应用程序容错性,这也是为什么像IIS和COM+以高隔离模式运行时需要这些进程。
在Windows中,进程存在的问题在于创建和管理进程需要耗费大量的资源,同时在大量使用进程时它们的伸缩性也不是很好。例如:你如果正在使用IIS,同时将大量的站点配置为隔离运行,那么每个站点都会有其专用的进程,而这些进程会消耗许多的资源(如内存)。
.NET中的应用程序域与进程有相同的优点,但多个应用程序域可以运行在同一个进程中。
应用程序域可以在同一个进程中安全的运行,这是因为CLR的代码校验功能确保允许代码之前代码可安全执行。这就提供了很强的伸缩性和可靠性。
当ASP.NET作为IIS4/5的一部分运行时,它会使用应用程序域来执行每个ASP.NET应用程序的实例,由于每个ASP.NET应用程序会在自己的应用程序域中运行,因此它不会和同一台计算机中的其它ASP.NET应用程序发生冲突。同时ASP.NET会忽略您在IIS中所指定的进程隔离性。