1、进行错误隔离和安全设置隔离,一个应用程序域如果崩溃不会影响其他应用程序域,功能类似于操作系统的进程
2、在.NET环境下才产生,因为它在CLR中运行
3、应用程序域的创建和销毁所需的开销相对于系统进程小,一个进程中可以包含多个应用程序域
- 在理解应用程序域之前,先了解一下进程的作用,其实应用程序域的作用就相当于进程的作用;
其实,进程就是操作系统用来隔离各个不同应用程序的机制。
- 在.net之前,应用程序被加载到进程中,可以有多个应用程序共享一个进程,但是这样一旦一个应用程序出错就会导致整个进程崩溃;系统为每个进程分配了虚拟内存(进程不能直接访问物理量内存)
,这样就决定了一个进程是无法访问另一个进程的内存的,自然加载在进程的应用程序也就不能访问另一个应用程序
的内存了,所以,进程就作为应用程序之间的一个边界而存在着,从而提高了应用程序的安全性,因为这样,当某个
应用程序出错了就不会影响到其他的应用程序了。
- 既然有了进程能够维持这样的应用程序的安全性,为何还要有应用程序域呢?原因就是进程的性能低(为什么说会对性能有很大影响呢?原因是当多个进程需要相互通信的时候,由于进程间是无法共享内存的,所以就必须在进程之间通过复杂的数据复制,这样对性能就有很大的影响了),在真实的 应用场景中,不可避免的要由进程之间的相互通信,但是进程之间又是无法共享内存的,也就是进程之间是无法 相互调用的,这就引出了应用程序域了。
-
应用程序域是为了减少系统开销的前提下达到应用程序安全。一个进程中可以有多个应用程序域,一个应用程序域对应一个应用程序;应用程序域也是相当于进程一样的一个
应用程序的边界,但是他对性能的开销比进程低;运行在同一个进程的应用程序是可以共享数据和相互通信的,
虽然也是不能直接的调用,但是可以通过复制对象或者代理的方式来实现相互的通信。
- 当一个进程被创建的时候系统会默认为该进程生成一个默认应用程序域,该域是无法被卸载的,只有当进程结束了
该域才被销毁,所以如果把程序集或类加载在默认的应用程序域的话,一旦出错了,就会导致进程崩溃。
所以建议自己创建应用程序域,创建应用程序域的步骤:
AppDomainSetup setup=new AppDomain();
setup.LoaderOptimization=LoaderOptimization.SingleDomain;//这种表明该域中的程序集是无法共享的
AppDomain domain=AppDomain.CreateDomain("Name",NULL,setup);
......
......//应用程序运行的代码;
domain.Unload();
- 一个应用程序要运行就必须有一个进程,进程中就必须有一个应用程序域,所以,首先得先把该应用程序的程序集
加载到域中,可以通过Assembly.Load();或者LoadFrom()来加载到域中。
分享到:
相关推荐
在.NET框架中,应用程序域(AppDomain)是执行代码的安全边界,它提供了隔离环境,使得不同应用程序或组件可以在同一进程中安全地并行运行。本文将深入探讨如何动态创建应用程序域以及如何卸载应用程序域,特别是在...
- **创建应用程序域**:可以通过 `AppDomainSetup` 类来设置应用程序域的属性,然后使用 `AppDomain.CreateDomain` 方法来创建一个新的应用程序域。 - **加载程序集**:可以在创建应用程序域后,使用 `AppDomain....
开发者可以通过`AppDomain.CurrentDomain`获取当前运行代码所在的应用程序域,或通过`Thread.GetDomain()`获取当前线程所在的应用程序域。虽然通常不需要直接操作应用程序域,但在特定情况下,如配置安全策略、动态...
在C#编程中,应用程序域(AppDomain)是.NET Framework中的一个重要概念,它提供了一种在隔离环境中执行代码的方式。这种隔离有助于确保一个程序的错误不会影响其他程序,同时允许动态加载和卸载代码。本篇文章将...
它负责加载 CLR(公共语言运行时)、创建应用程序域 AppDomain、初始化 Web 应用程序等。IIS 的主进程 INetInfo.exe 包含所有的配置信息。如果 IIS 无法处理.aspx 文件,它会根据映射表找到相应的处理程序。 Aspnet...
6. **应用程序域AppDomain** AppDomain提供了一种安全的隔离机制,使得不同应用程序或组件可以在同一进程中独立运行而不会相互影响。每个ASP.NET应用程序运行在一个单独的AppDomain中,确保了应用程序的稳定性和...
应用程序域是.Net的运行环境,CLR将程序分成一个或多个逻辑区域就叫应用程序域AppDomain。 最后,让我们来讨论CTS、CLS、CLR的概念。CTS是通用类型系统,CLS是公共语言规范,CLR是公共语言运行库。这三者都是.Net ...
5. **`AppDomain.CurrentDomain.BaseDirectory`**:返回应用程序域的基目录。如果应用程序是在Web环境中运行的,则这个目录通常是网站的根目录。 6. **`Application.ExecutablePath`**:返回正在运行的应用程序的...
1. 应用程序域AppDomain:理解为一种轻量级进程,主要为了安全,资源占用小。 ***数据库操作:包括DataSet、DataCommand、DataAdapter、SQLConnection和DataReader等类的使用,它们在数据库操作中扮演重要角色。 3...
在.NET框架中,AppDomain是应用程序域的抽象,它是运行时环境执行代码的基本单元。AppDomain提供了一种隔离机制,使得不同的应用程序可以在同一进程内独立运行,互不影响。这种隔离可以确保一个应用程序的问题不会...
需要注意的是,虽然注册了AppDomain.DomainUnload事件可以在应用程序域卸载时进行清理操作,但这并不能保证这个事件一定会被调用。因此,在实际的应用程序中,还需要在其他地方处理可能出现的异常。 在代码示例中,...
在.NET框架中,应用程序域(AppDomain)是实现插件式框架的关键技术之一。本文将深入探讨应用程序域的概念、优势以及如何在插件式框架中应用。 应用程序域是.NET运行时环境(CLR)中的一个核心概念,它为代码提供了...
在.NET框架中,`AppDomain`是应用程序域的抽象,它是.NET执行环境中的一个核心概念。每个`AppDomain`都是一个独立的沙箱,用于执行代码、管理资源和隔离应用程序。`AppDomain`允许我们创建多租户环境,提供安全性和...
程序集的加载是通过 AppDomain 来实现的,AppDomain 是.Net Framework 中的一个基本概念,用于定义一个应用程序域。在应用程序域中,可以加载多个程序集中,程序集的加载可以通过 Assembly.Load() 方法来实现。 二...
本文将深入探讨一种基于AppDomain和Quartz定时任务管理的高级应用,以期达到对应用程序域更为精细的控制,并通过定时任务管理提升系统的稳定性和资源利用率。 首先,我们来了解AppDomain这一核心概念。AppDomain是...
.NET远程处理则是.NET Framework内建的一种进程间通信(IPC)机制,允许对象在不同的应用程序域(AppDomain)之间透明地进行交互,甚至跨越网络。本书将阐述.NET远程处理的基本原理,包括序列化、激活和代理等概念,...
- **应用程序域的操作**:通过`System.AppDomain`类可以进行应用程序域的创建、加载程序集、创建对象等操作。 - 获取当前运行的代码所在的应用程序域:`AppDomain currentDomain = AppDomain.CurrentDomain;` - ...
在默认情况下,IIS的应用程序池采用的是OnDemand启动模式,即当第一个请求到达时,IIS才会初始化应用程序池,加载应用程序域(AppDomain),并执行相应的预热操作。这种模式在服务器资源有限或者低流量站点时非常...
.NET Remoting是微软.NET框架提供的一种机制,用于在不同的应用程序域(AppDomain)之间进行通信,无论是同一台机器上的不同进程,还是网络上的不同计算机。它使得开发分布式应用程序变得更加便捷,能够实现对象间的...