应用程序域概念(Application Domain,简App Domain)
我们知道.NET程序都是运行在托管环境(managed environment),但是操作系统只提供了进程(Process),而进程呢又只是提供了内存的控制。所以我们创建的.NET程序是无法直接在进程中运行的,那怎么办呢?这个时候应用程序域作为中介的角色出现了,它能够运行非托管进程和托管进程之上所以我们的WINFROM、WENFROM,控制台应用程序或是程序集都是运行在一个应用程序域中。
单独的库程序集是不能被直接运行的(库程序集即.dll的文件),它必须和一个可执行程序集文件一起启动(可执行程序集即.exe)。当可执行文件加载完毕时,.NET会在当前进程中创建一个应用程序域称为默认域,域的名称和程序集的名称相同,它不能被销毁直至进程销毁。
那C#不是运行在托管环境下的吗?那应用程序域是允许访问加载的程序集的Net Runtime所提供的服务。
一个进程可以包涵多个应用程序域,一个应用程序域可以包涵多个程序集,那有什么好处呢?就是好处1.创建进程的开销要比创建一个应用程序域的开销要大的多,所以创建多个域在进程2.错误隔离,一个应用程序域如果崩溃,只会影响其所在的应用程序域,而不会影响其他应用程序域。
|