宿主应用程序可监视AppDomain消耗的资源。有的宿主根据这种信息判断一个AppDomain的内存或CPU消耗是否超过了应有的水准,并强制卸载一个AppDomain。

还可以利用监视来比较不同算法的资源消耗情况,判断哪种算法用的资源较少。由于AppDomain监视本身也会产生开销,所以宿主必须将AppDomain的静态属性MonitoringEnabled设为true,从而显示打开监视。监视一旦打开就不能关闭;如果试图将MonitoringEnabled设为false,会抛出一个ArgumentException。

监视打开后,你的代码可查询AppDomain类提供的一下4个只读属性。

  1. MonitoringSurvivedProcessMemorySize  这个Int64静态属性返回由当前CLR实例控制的所有AppDomain正在使用的字节数。这个数字只保证上一次垃圾回收时使准确的。
  2. MonitoringTotalAllocatedMemorySize  这个Int64实例属性返回一个特定的AppDomain已分配的字节数。这个数字只保证上一次垃圾回收时使准确的。
  3. MonitoringSurvivedMemorySize  这个Int64实例属性返回一个特定的AppDomain当前正在使用的字节数。这个数字只保证上一次垃圾回收时使准确的。
  4. 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的更多相关文章

  1. 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 ...

  2. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  3. Centos7 install Openstack - (第四节)添加计算服务(Nova)

    Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...

  4. 第五节:AppDomain FirstChance异常通知

    每个AppDomain都可关联一组回调方法:CLR开始查找AppDomain中的catch块时,这些回调方法就会得到调用.这些方法可执行日志记录操作.除此之外,宿主可利用这个机制监视AppDomain ...

  5. 第二节:AppDomain

    CLR COM服务器初始化时,会创建一个AppDomain.AppDomain是一组程序集的逻辑容器.CLR初始化时创建的第一个AppDomain称为默认的AppDomain,这个默认的AppDoma ...

  6. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  7. VUE2.0实现购物车和地址选配功能学习第四节

    第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...

  8. delphi 线程教学第四节:多线程类的改进

    第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数 ...

  9. 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则

                                                                               第十四节过拟合解决手段L1和L2正则 第十三节中, ...

随机推荐

  1. EL表达式结合页面JSTL使用 迭代显示表格

    1.迭代显示表格 <%@ page isELIgnored="false"%><%@ taglib uri="/WEB-INF/struts-bean. ...

  2. The Ninth Hunan Collegiate Programming Contest (2013) Problem I

    Problem I Interesting Calculator There is an interesting calculator. It has 3 rows of button. Row 1: ...

  3. [转载]python中multiprocessing.pool函数介绍

    原文地址:http://blog.sina.com.cn/s/blog_5fa432b40101kwpi.html 作者:龙峰 摘自:http://hi.baidu.com/xjtukanif/blo ...

  4. PL/0与Pascal-S编译器程序详细注释

    学校编译课的作业之一,要求阅读两个较为简单的编译器的代码并做注释, 个人感觉是一次挺有意义的锻炼, 将自己的心得分享出来与一同在进步的同学们分享. 今后有时间再做进一步的更新和总结,其中可能有不少错误 ...

  5. Android开发-API指南-<uses-feature>

    <uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...

  6. deep learning新征程

    deep learning新征程(一) zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2015-11-26   声明: 1 ...

  7. python中时间和时区

    1.时区 http://blog.csdn.net/cz157733055/article/details/38319195 2.时间 datetime.timedelta代表两个时间之间的的时间差 ...

  8. 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)

    电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO. 单点登录开源有很多的解决方案, ...

  9. 网络设备模拟器 GNS3

    https://www.gns3.com/support/docs/linux-installation sudo dpkg --add-architecture i386 sudo add-apt- ...

  10. 【IHttpHandler】ASP.NET 生命周期

    对由 Microsoft® Internet 信息服务 (IIS) 处理的 Microsoft® ASP.NET 页面的每个请求都会被移交到 ASP.NET HTTP 管道.HTTP 管道由一系列托管 ...