第四节:监视AppDomain
宿主应用程序可监视AppDomain消耗的资源。有的宿主根据这种信息判断一个AppDomain的内存或CPU消耗是否超过了应有的水准,并强制卸载一个AppDomain。
还可以利用监视来比较不同算法的资源消耗情况,判断哪种算法用的资源较少。由于AppDomain监视本身也会产生开销,所以宿主必须将AppDomain的静态属性MonitoringEnabled设为true,从而显示打开监视。监视一旦打开就不能关闭;如果试图将MonitoringEnabled设为false,会抛出一个ArgumentException。
监视打开后,你的代码可查询AppDomain类提供的一下4个只读属性。
- MonitoringSurvivedProcessMemorySize 这个Int64静态属性返回由当前CLR实例控制的所有AppDomain正在使用的字节数。这个数字只保证上一次垃圾回收时使准确的。
- MonitoringTotalAllocatedMemorySize 这个Int64实例属性返回一个特定的AppDomain已分配的字节数。这个数字只保证上一次垃圾回收时使准确的。
- MonitoringSurvivedMemorySize 这个Int64实例属性返回一个特定的AppDomain当前正在使用的字节数。这个数字只保证上一次垃圾回收时使准确的。
- MonitoringTotalProcessorTime 这个TimeSpan实例属性返回一个特定的AppDomain的CPU占有率。
下面这个演示了如何利用这三个属性检查在两个时间点之间,一个AppDomain中发生的变化:
sealed class AppDomainMonitorDelta : IDisposable
{ private AppDomain m_appDomain; private TimeSpan m_thisADCpu; private Int64 m_thisADMemoryInUse; private Int64 m_thisADMemoryAllocated; static AppDomainMonitorDelta()
{
//确定以打开AppDomain监视
AppDomain.MonitoringIsEnabled = true;
}
public AppDomainMonitorDelta(AppDomain ad)
{
m_appDomain = ad ?? AppDomain.CurrentDomain;
//
m_thisADCpu = m_appDomain.MonitoringTotalProcessorTime;
//返回由当前CLR实例控制的所有AppDomain正在使用的字节数
m_thisADMemoryInUse = m_appDomain.MonitoringSurvivedMemorySize;
//返回一个特定的AppDomain已分配的字节数
m_thisADMemoryAllocated = m_appDomain.MonitoringTotalAllocatedMemorySize;
}
public void Dispose()
{
GC.Collect();
Console.WriteLine("FriendlyName={0},CPU={1}ms", m_appDomain.FriendlyName,
(m_appDomain.MonitoringTotalProcessorTime - m_thisADCpu).TotalMilliseconds);
Console.WriteLine("Allocated {0:N0} bytes of which {1:N0} survived GCs",
m_appDomain.MonitoringTotalAllocatedMemorySize - m_thisADMemoryAllocated,
m_appDomain.MonitoringSurvivedMemorySize - m_thisADMemoryInUse);
} }
下面演示如何使用AppDomainMonitorDelta类
private static void AppDomainResourceMonitoring()
{
using (new AppDomainMonitorDelta(null))
{
var list = new List<Object>();
for (Int32 x = ; x < ; x++) list.Add(new Byte[]);
for (Int32 x = ; x < ; x++)
new Byte[].GetType();
Int64 stop = Environment.TickCount + ;
while (Environment.TickCount < stop) ;
}
}
第四节:监视AppDomain的更多相关文章
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- android内部培训视频_第四节(1)_异步网络操作
第四节(1):异步网络操作 一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...
- Centos7 install Openstack - (第四节)添加计算服务(Nova)
Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...
- 第五节:AppDomain FirstChance异常通知
每个AppDomain都可关联一组回调方法:CLR开始查找AppDomain中的catch块时,这些回调方法就会得到调用.这些方法可执行日志记录操作.除此之外,宿主可利用这个机制监视AppDomain ...
- 第二节:AppDomain
CLR COM服务器初始化时,会创建一个AppDomain.AppDomain是一组程序集的逻辑容器.CLR初始化时创建的第一个AppDomain称为默认的AppDomain,这个默认的AppDoma ...
- 第四节,Linux基础命令
第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令 ...
- VUE2.0实现购物车和地址选配功能学习第四节
第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...
- delphi 线程教学第四节:多线程类的改进
第四节:多线程类的改进 1.需要改进的地方 a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数 ...
- 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
第十四节过拟合解决手段L1和L2正则 第十三节中, ...
随机推荐
- mplayer 用法大全 转
1,录音:mplayer mms://202.***.***.***/test.asf -dumpstream -dumpfile MyMovie.asf 可以把mms ...
- 为什么要使用Spark?
现有的hadoop生态系统中存在的问题 1)使用mapreduce进行批量离线分析: 2)使用hive进行历史数据的分析: 3)使用hbase进行实时数据的查询: 4)使用storm进行实时的流处理: ...
- MFC创建非模态对话框并修改CStatic文字
//由IDD_STATUS_DIALOG创建一个对话框CDialog* pCheckNetStatusDlg = new CDialog(); pCheckNetStatusDlg->Creat ...
- CODESOFT都出中文官网了,你还等什么呢
CODESOFT是先进的标签设计和集成软件,提供了无与伦比的灵活性.功能和世界范围的支持,是企业环境下标签打印的最佳选择.在过去的时间里,CODESOFT从未停止过努力与改进,现如今已推出了最新版本C ...
- 分段播放的flash播放器
效果: 视频分段好处显而易见,就是节省流量,因为看视频很多时候都不会看完,还有很多时候是跳着看的.还有的时候也许用户暂停视频出去买东西了... 本文不讨论flash rtmp直播流,例子用的是普通的h ...
- SQL基本语句(3) LOAD DATA INFILE
使用LOAD语句批量录入数据 语法: LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNOR ...
- spring batch学习笔记
Spring Batch是什么? Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...
- SendKeys回车操作类
/************************************************************ FileName: SendKey.cs Description: 模拟键盘 ...
- haproxy配置文件简单管理
版本:python3功能:对haproxy配置文件进行简单的查询.添加以及删除功能操作流程:1.根据提示选择相应的选项2.进入所选项后,根据提示写入相应的参数3.查询功能会返回查询结果,添加.删除以及 ...
- leetcode 70
70. Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time y ...