📄 7.4 效能监视.htm
字号:
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px" align=middle><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial
color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 列表7-2 </B></FONT>HWInputMonPerfInfo
DLL</FONT></TD></TR></TBODY></TABLE></CENTER>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">HWInputPerfDataMap.h <BR>/******************************************************************** <BR>模组:HWInputPerfDataMap.h <BR>通告:Copyright (c)2000 Jeffrey Richter <BR>说明:效能物件和计数器的定义 <BR>********************************************************************/ <BR>#ifdef HWINPUTPERFDATAMAP_IMPL <BR>#define PERFDATA_IMPL <BR>#endif <BR>#include "PerfData.h" <BR>/////////////////////////////////////////////////////////////////////////////// <BR>PERFDATA_DEFINE_OBJECT(PERFOBJ_HWINPUT,100); <BR>PERFDATA_DEFINE_COUNTER(HWINPUT_KEYS,101); <BR>PERFDATA_DEFINE_COUNTER(HWINPUT_KEYSPERSEC,102); <BR>PERFDATA_DEFINE_COUNTER(HWINPUT_MOUSEMOVES,103); <BR>PERFDATA_DEFINE_COUNTER(HWINPUT_MOUSEMOVESPERSEC,104); <BR>PERFDATA_DEFINE_OBJECT(PERFOBJ_MOUSECLCKS,200); <BR>PERFDATA_DEFINE_COUNTER(MOUSECLCKS_CLICKS,201); <BR>PERFDATA_DEFINE_COUNTER(MOUSECLCKS_CLICKSPERSEC,202); <BR>/////////////////////////////////////////////////////////////////////////////// <BR>#ifdef HWINPUTPERFDATAMAP_IMPL <BR>/////////////////////////////////////////////////////////////////////////////// <BR>PERFDATA_MAP_BEGIN() <BR> PERFDATA_MAP_OBJ(PERFOBJ_HWINPUT, TEXT("Hardware Input"), <BR> TEXT("The Hardware Input object type includes those counters") <BR> TEXT("that apply to keystrokes and mouse moves."), <BR> PERF_DETAIL_NOVICE, HWINPUT_KEYS, PERF_NO_INSTANCES, 0) <BR> PERFDATA_MAP_CTR(HWINPUT_KEYS, TEXT("Keystrokes"), TEXT("The number <BR> of down and up keystrokes"), PERF_DETAIL_NOVICE, 0, PERF_COUNTER_RAWCOUNT) <BR> PERFDATA_MAP_CTR(HWINPUT_KEYSPERSEC, TEXT("Keystrokes/sec"), <BR> TEXT("The number of down and up keystrokes per second"), <BR> PERF_DETAIL_NOVICE, 0, PERF_COUNTER_COUNTER) <BR> PERFDATA_MAP_CTR(HWINPUT_MOUSEMOVES, TEXT("Mouse moves"), <BR> TEXT("The number of mouse moves"), <BR> PERF_DETAIL_NOVICE, 0, PERF_COUNTER_RAWCOUNT) <BR> PERFDATA_MAP_CTR(HWINPUT_MOUSEMOVESPERSEC, TEXT("Mouse moves/sec"), <BR> TEXT("The number of mouse moves per second"), <BR> PERF_DETAIL_NOVICE, 0, PERF_COUNTER_COUNTER) <BR> PERFDATA_MAP_OBJ(PERFOBJ_MOUSECLCKS, TEXT("Mouse Clicks"), <BR> TEXT("The Mouse Clicks object type includes those counters") <BR> TEXT("that apply to mouse button clicks."), <BR> PERF_DETAIL_NOVICE, MOUSECLCKS_CLICKS, 4, 10) <BR> PERFDATA_MAP_CTR(MOUSECLCKS_CLICKS,TEXT("Clicks "), <BR> TEXT("The number of down clicks"), <BR> PERF_DETAIL_NOVICE, 0, PERF_COUNTER_RAWCOUNT) <BR> PERFDATA_MAP_CTR(MOUSECLCKS_CLICKSPERSEC, TEXT("Clicks/sec"), <BR> TEXT("The number of down clicks per second"), <BR> PERF_DETAIL_NOVICE,0,PERF_COUNTER_COUNTER) <BR> PERFDATA_MAP_END("HWInputMon") <BR>/////////////////////////////////////////////////////////////////////////////// <BR>#endif //HWINPUTPERFDATAMAP_IMPL <BR>/////////////////////////////////End Of File /////////////////////////////////</PRE></FONT></DIV>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE style="LINE-HEIGHT: 25px" border=0>
<TBODY style="LINE-HEIGHT: 25px">
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px" align=middle><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial
color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 列表7-3 </B></FONT>HWInputMon之资料对映</FONT></TD></TR></TBODY></TABLE></CENTER><A
style="LINE-HEIGHT: 25px" name=207007>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7
size=5><B style="LINE-HEIGHT: 25px">同步存取计数器值<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>同步存取计数器值是每一个程序设计师需要严肃地去面对的一个议题。要「正确地」实作计数器,您应该在一个重要的部分或某些类似的事物中包装每个对计数器值的修正。然而,要求进去和离开一个关键部分的CPU时间通常会比CPU时间要求只改变简单的32位元或64位元值要高得多。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>因为同步存取对您的应用程序之执行效能有重大的影响。我曾跟负责Windows之执行效能的Microsoft开发者提过这一点。他告诉我大部份的系统计数器不会同步存取计数器值。当然这减少了同步处理计数器值的成本,但是却意味着该值有被讹用的可能性。然而,计数器值误用的情形很不容易产生,所以开发小组认为速度所带来的利益远远超过不精确资讯的可能性。是的,系统监控程序可以显示一个被统计资讯丢弃之不正确值,但是这个可能性非常小。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在建立及测试效能物件和计数器的经验来看,我同意Windows小组的看法。那就是,适当地对计数器值做同步存取的动作以避免产生一个不正确值的可能性。然而,当在设计C++
类别时,它必须能让您为自己建立这个选择权的能力,所以C++
类别提供了叁个公共的函数,如果您觉得适合的话,它允许您锁定计数器或解开锁定:</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">void CPerfData::LockCtrs()const; <BR>BOOL CPerfData::TryLockCtrs()const; <BR>void CPerfData::UnlockCtrs()const;</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>多数的应用程序不会使用到这些功能,您还是在CperfData类别中实作了这些函数的呼叫。例如,当实作的Collect函数被呼叫时,它会随时锁定计数器资讯并解开锁定。这么做是必要的,因为Collect函数有许多工作要做,而当它正在收集资料时,在比对另一个将被执行指令之附加成本是无足轻重的。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>另外,当在新增或移除物件实例时,我也锁定了被分享的内存区块。这可以防止资料架构发生误用以及程序代码毁坏的情形。HWInputMon.cpp模组也说明了从_tWinMain函数内部使用这些函数的方法。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>请注意这个重要的情形:由于在不同处理程序中执行的线程会存取被分享的记忆区块,所以将这些线程同步的一个简单的方式即是使用一个mutex核心物件。然而,等待一个核心物件伴随的即是一个对重要的执行效能之击中。关键的部分必须负担更好的效能,但是非常遗憾的是,它只能在一个单一处理程序中用来对线程做同步的处理。因为我在若干处理程序中需要非常快速的从线程到分享内存缓冲区存取之专用通路,所以我决定用我的Coptex类别来同步存取分享内存缓冲区,请参阅《Programming
Applications for Microsoft Windows, Fourth Edition》(Jeffreyb
Richter, Microsoft Press, 1999)之内容以取得此类别的描述。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>为了解有关这个CperfData类别的使用方法,请查阅随附的原始程序代码以取得更多的资讯,以察看设定此专案以及工作区的方法。</FONT></P<
p>
<P class=content_page><A
href="http://www.acejoy.com/Html/Article/network/5820061017123258_P3.html">上一页</A> <A
href="http://www.acejoy.com/Html/Article/network/5820061017123258.html">[1]</A> <A
href="http://www.acejoy.com/Html/Article/network/5820061017123258_P2.html">[2]</A> <A
href="http://www.acejoy.com/Html/Article/network/5820061017123258_P3.html">[3]</A> <STRONG><FONT
color=#ff0033>[4]</FONT></STRONG> <A
href="http://www.acejoy.com/Html/Article/network/5820061017123258_P5.html">[5]</A> <A
href="http://www.acejoy.com/Html/Article/network/5820061017123258_P5.html">下一页</A></P></DIV><BR><BR></TD></TR></TBODY></TABLE>
<TABLE style="CLEAR: both" cellSpacing=0 cellPadding=0 width="97%">
<TBODY>
<TR>
<TD align=right>
<TABLE>
<TBODY>
<TR>
<TD>阅读:<SPAN id=news_hits></SPAN>
<SCRIPT src="7.4 效能监视.files/GetHits.htm"
type=text/JavaScript></SCRIPT>
次<BR>录入:<A
href="http://www.acejoy.com/User/Info.Asp?UserName=admin">admin</A><BR><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right>【 <A
href="http://www.acejoy.com/Comment.asp?ChannelID=1&Action=Write&InfoID=58">评论</A>
】 【 <A
href="http://www.acejoy.com/User/SendMail.asp?Title=Windows2000 服务器端应用程序开发设计指南-效能监视"
target=_blank>推荐</A> 】 【 <A href="javascript:window.print()">打印</A>
】 </TD></TR></TBODY></TABLE>
<TABLE style="CLEAR: both" width="97%" align=center>
<TBODY>
<TR>
<TD>上一篇:<A
title="标题:Windows2000 服务器端应用程序开发设计指南-事件记录 作者:Jeffrey Richter Jason D. Clark 更新:2006-10-13 21:40:03 点击:986"
href="http://www.acejoy.com/Html/Article/network/5720061013214003.html">Windows2000
服务器端应用程序开发设计指南-事件记录</A><BR>下一篇:<A
title="标题:Windows2000 服务器端应用程序开发设计指南-Windows Management Instrumentation 作者:Jeffrey Richter Jason D. Clark 更新:2006-10-23 9:19:39 点击:761"
href="http://www.acejoy.com/Html/Article/network/5920061023091939.html">Windows2000
服务器端应用程序开发设计指南-Windows Management Instrumentation</A>
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=mframe>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm><SPAN class=tt>相关新闻</SPAN> </TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<SCRIPT language=javascript
src="7.4 效能监视.files/GetCorrelative.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm><SPAN class=tt>本文评论</SPAN> </TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm>
<P> </P>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<SCRIPT language=javascript
src="7.4 效能监视.files/Comment.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm></TD>
<TD class=mr></TD></TR></TBODY></TABLE></DIV>
<TABLE id=footer cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR style="LINE-HEIGHT: 130%" align=middle>
<TD height=23> <A
href='javascript:window.external.addFavorite("http://www.acejoy.com","ACE开发者")'><FONT
color=#000000>加入收藏</FONT></A> - <A
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>关于本站</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=Copyright" target=_blank><FONT
color=#000000>版权申明</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>联系站长</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/LinkSite.asp" target=_blank><FONT
color=#000000>友情链接</FONT></A> </TD></TR>
<TR align=middle>
<TD height=23>Copyright© 2004-2006 <A
href="http://www.acejoy.com/">http://www.acejoy.com/</A> .All Rights
Reserved <A href="http://www.miibeian.gov.cn/" target=_blank>京ICP备06055248
</A>
<SCRIPT language=JavaScript src="7.4 效能监视.files/stat.htm"
charset=gb2312></SCRIPT>
</TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV><!--Powered by:CreateLive CMS Version 3.1(www.acejoy.com) CreateDate:2007-3-4 10:50:40--></DIV></DIV></DIV></DIV></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -