AppDomain

1.配置AppDomain

使用AppDomainSetup类为新应用程序域提供带有配置信息的公共语言运行时。创建自己的应用程序域时,最重要的ApplicationBase(它是定义应用程序的根目录,当运行时需要满足类型请求时,它在ApplicationBase属性指定的目录中探测包含该类型的程序集。)。其他AppDomainSetup属性主要由运行时宿主用于配置特殊的应用程序域。

    using System;
using System.Reflection; class AppDomain4
{
public static void Main()
{
// Create application domain setup information.
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = "f:\\work\\development\\latest"; // Create the application domain.
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // Write application domain information to the console.
Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("child domain: " + domain.FriendlyName);
Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase); // Unload the application domain.
AppDomain.Unload(domain);
}
}

2.卸载应用程序域

调用AppDomain.Upload方法将其卸载。Upload方法会正常关闭指定的应用程序域。卸载过程中,没有新线程可以访问该应用程序域,并且会释放该应用程序域特定的所有数据结构。

加载到应用程序域中的所有程序集都会被移除,无法再使用。如果应用程序域中的程序集不是特定于域的,则程序集的数据会保留在内存中,直到整个进程关闭。除了关闭整个进程,没有机制可以卸载非特定于域的程序集。

.NET Framework 2.0 版中没有一个线程专用于卸载应用程序域。 这将提高可靠性,尤其是在.NET Framework 承载。 当线程调用Unload,目标域标记为要卸载。 专用的线程尝试卸载的域和域中的所有线程都将立即都中止。 如果一个线程不会中止,例如因为它执行非托管的代码,或是因为正在执行finally块,然后在一段时间后的CannotUnloadAppDomainException在最初调用的线程中引发Unload。 如果不可能最终会中止的线程结束,则目标域不卸载。 因此,在.NET Framework 2.0 版domain不能保证卸载,因为它可能不能终止正在执行的线程。

  1. 卸载应用程序域后,应用程序域的内存和应用程序域内开的线程情况?
应用程序域卸载后,相应的应用程序域内的内存会一并释放掉。域内的所有线程都会终止掉

2.如果不想卸载应用程序域,又想释放内存方法?

1.可以采用AppDomain内代码执行完后,调用GC.Collect()方法去手动触发GC收集。这样每次执行完后都去调用GC.Collect()性能可能会不高。可选择定时5分钟或者10分钟或者自定义时间去触发GC.Collect()。 2.强制卸载应用程序域,并重新加载

AppDomain配置和卸载的更多相关文章

  1. RootKit随手记(一)RootKit的驱动隐藏、读取配置、卸载安装

    边学习边更新这专题,随手记录一下用到的思路,给自己看的(所以读者看可能有些懵,不好意思...) RootKit随手记(一)RootKit的驱动隐藏.读取配置.卸载安装 一.驱动隐藏 1. 隐藏原理 一 ...

  2. Mysql系列(一)—— 基于5.7.22 解压版下载、安装、配置和卸载

    1.下载 从官网中直接获取自己想要的版本: MySQL Community Server 5.7.22 2.解压 将下载到的文件解压缩到自己喜欢的位置. 与mysql 5.6不同的是5.7版本中没有d ...

  3. ROS入门笔记(二):ROS安装与环境配置及卸载(重点)

    ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...

  4. SqlServer环境配置和卸载

    一.数据库简介 SQLServer环境配置 安装好数据库以后怎么启用sa账号,来访问数据库. 1.先用windows账号登录数据库. 2.启用windows身份验证方式和sql server身份验证方 ...

  5. linux下rpm包安装、配置和卸载mysql

    WIN10下虚拟机:VMware workstation 12 PRO 安装 # 1.查看系统版本 [root@vm-xiluhua][/home/xiluhua]$ cat /etc/redhat- ...

  6. 【转】CentOS中vsftp安装、配置、卸载

    1. 安装VSFTP yum -y install vsftpd 2. 配置vsftpd.conf文件 # Example config file /etc/vsftpd/vsftpd.conf # ...

  7. CentOS中vsftp安装、配置、卸载

    1. 安装VSFTP 1 [root@localhost ~]# yum -y install vsftpd 2. 配置vsftpd.conf文件 [root@localhost ~]# vi /et ...

  8. oracle安装、配置、卸载、错误解决

    oracle安装卸载的帖子很多,这里整理出一份,都只是给出一个链接,忘了时可以自己看看.哈哈,其实我也觉得已经不会忘了,被这个鸡毛问题困了两天,修改控制文件.环境变量.注册表什么的都不能解决问题,最后 ...

  9. 重新配置与卸载 11gR2 Grid Infrastructure

    Oracle 11g R2 Grid Infrastructure 的安装与配置较之前的版本提供了更多的灵活性.在Grid Infrastructure安装完毕前执行root.sh经常容易出现错误,并 ...

随机推荐

  1. 用PL/sql连接oracle 弹窗出现 could not resolve the connect identifier specified 这个错误

    1 错误如下图: 图1 2.可能原因: 配置oracle客户端中tnsnames.ora文件时,把数据库名弄错,如下图: 图2 箭头所指位置出错.箭头处应该为我们安装时的数据库名(通常是orcl).而 ...

  2. 014-CallbackServlet代码

    package ${enclosing_package}; import java.io.IOException; import java.util.ResourceBundle; import ja ...

  3. iOS设备的屏幕分辨率

    全部列在这里吧.方便自己方便别人.保持更新…… iPhone: iPhone 1G320x480 iPhone 3G320x480 iPhone 3GS320x480 iPhone 4640x960 ...

  4. Linux下模拟多线程的并发并发shell脚本

    分享一个在Linux下模拟多线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常多,在管理大批服务器时非常的实用.  ...

  5. 2017年11月27日 C#MDI窗体创建&记事本打印&记事本查找、自动换行

    MDI窗体第一个父窗体 把属性里的IsMdiContainer设置为true就可以了 父窗体连接子窗体 //创建一个新的类,用来连接别的窗体,并且别的窗体为唯一窗体 List<Form> ...

  6. ubuntu下部署django

    一:保证python运行环境安装 apt-get install python 如果需要进行开发则还要安装python-dev apt-get install python-dev 二:安装djang ...

  7. redis(5)持久化

    一.持久化 计算机的数据有两种状态: 1)持久态:如硬盘上的数据 2)瞬时态:如内存当中的数据 持久化就是将瞬时数据转换为持久数据的一个过程,但注意持久化并不意味的数据永远存在,针对不同的持久化,数据 ...

  8. Java基础(9)——数组

    难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...

  9. 改善Java程序的151个建议(1-4)

    1.不要在常量和变量中出现易混淆的数字 个人感觉这条在于编程命名的规范性.代码除了给机器看,也要给人看.要写能够结构清晰,命名规范,让人看懂的代码. 字母l作为长整型标志时务必大写 L 2.莫让常量蜕 ...

  10. spring框架笔记

    Spring实现依赖注入的两种方式: 1.构造方法注入 2.set方法注入,p标签注入 Spring中事务的两种实现方式: 编程式事务管理 声明式事务管理(推荐) Spring增强类型: Before ...