您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:12 来源:vckbase.com

本文章共14643字,分10页,当前第3页,快速翻页:
 


性能计数器

  性能计数器在 Visual Basic 6.0 时期很难实现。在 Visual Basic 6.0 中不可能直接使用性能计数器 API 的原因是因为进入点需要在你的链接库中定义——在 Visual Basic 中的一切都被 COM CoClass 的四个标准 Dll 进入点所所控制,没有办法加入你自己的入口点。为了得到应用程序的统计数据,典型的做法是利用性能计数器(perfmon.exe)加载的辅助 DLL并与之沟通。只有在合适的点调用更新计数器,你的应用程序才能得到检测。这并不容易,因为在对象实体间需要一些共享内存来维护计数器的值。这是因为 Perfmon 运行在一个单独的进程,在应用程序里调用核心集合的函数(驻留在Perfmon进程)是独立于你的单独对象的。.NET Framework 解决了这些令人头疼的问题。Figure 1显示了当前的计数器 的体系架构。.NET Framework 组件 netfxperf.dll 运行在 Microsoft Management Console (MMC)进程中(mmc.exe),mmc.exe 进程 操纵者控制性能计数器管理单元。该进程(B)加载 CRL 并与进程 A 中的你的应用程序沟通,以提获取统计数据。
逆@风@者


Figure 1 .NET Framework 中性能计数器架构

  为了让 Perfmon 管理单元(或任何其它程序)找到你的计数器,必须添加大量注册表设置。就像事件日志一样,当执行实际的代码行时,.NET Framework 自动的遵循这些设置。其中有一个主键要被创建:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\category\

这个键通常只包含一个名为 Performance 的子键。
   为此可以使用一个通用的 DLL,唯一要解决的问题是你的程序集被管理单元加载时如何与该键关联,以便 netfxperf.dll 知道从哪里得到你的计数器(和它们的值)。解决方法是使用该键下的 Wbem 值。这些值被 WMI 用来获得 你的计数器。当它执行到你的代码时,.NET Framework 使用底层的 WMI 策略注册你的计数器。以后,当执行 Perfmon 时,它从注册表中提取你的计数器名字并使用 WMI, 建立一个与之连接的请求。如果你程序正在运行,WMI会提供到实际值的连接。顺便说一下,这是使用 WMI 自动发现和清除的特点完成的,这也是为什么某些注册表值用 WbemAdap 预设的原因(WMI是 一个基于 Web 的企业管理的实现,也就是 WBEM)。另外一些注册表计数器值,First Counter/Help 和 Last Counter/Help, 必须与系统中所有的计数器串接在一起。在过去这可以通过调用 lodctr/unlodctr API函数完成。如果出错,就会有大问题,因为那将会影响 Perfmon 枚举机器中所有计数器的能力。.NET Framework 在这个问题上再一次为你考虑了所有的一切。
   .NET Framework 支持所有可获得的 Windows 计数器类型。最常用的是绝对值,平均值和时段分组值。这样便可以表达诸如应用程序所执行的 SQL 命令数 量,编译某个值所花费的平均时间,或者每秒钟 Web 服务请求数。在 .NET Framework 中创建性能计数器并增加它的值易入反掌,代码如下:
Imports System.Diagnostics



Dim objCat as PerfomanceCounterCategory

Dim objCtr as PerformanceCounter



objCat = PerformanceCounterCategory.Create("MyApp", _

					"MyApp help",_

					 "counter 1", _

					"counter 1 help")



objCtr = new PerformaceCounter("MyApp", "counter 1", false);

objCtr.Increment()

  此外,在开发期间,你必须注意不要把注册表弄得太乱。当分类(category)的 Create 方法被执行,MyApp 键值就会出现在刚才所示的注册表路径下。当 new PerformanceCounter 被执行时, 该 Wbem 值在 WMI ADAP 处理期间被创建。
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 下一页>>
相关文章

一个生成公章图片的简易工具
KVIP考勤系统
Windows SDK笔记(七):创建MDI窗口
基于 SSL 的 ASP.NET Web 应用测试自动化
层叠式窗体控件指南
连接 COM 与 .NET 的桥梁(一)——预备知识
在Visual C 中定制AppWizard (一)
VC中调用EXECL模板生成报表
Brew 后台应用开发
浅谈PDFlib中文输出(二)如何在PDFlib中使
谈谈软件项目管理的重要性
简单快速的哈夫曼编码
自己编的SQL服务端加客户端
多功能标签CLabelEx
IE 控件一些高级使用方法
用VC 创建自定义向导程序
如何在 Windows NT、Windows 2000 和 Windo
对C#中的TreeView加背景图
static_cast<>揭密
自己写 FILTER 改变画面颜色

相关评论


本文章所属分类:首页 VC++

  热门关键字: