以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- 穷人的电源监视器 (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=58699) |
-- 作者:卷积内核 -- 发布时间:2/1/2008 3:13:00 PM -- 穷人的电源监视器 目前,便携式计算机的销量已经超过了台式计算机,其意义重大。这意味着用户具有更多的移动性,可以坐在会议室、咖啡厅或飞机上使用应用程序。它还意味着您一天的绝大部分工作可以远离为便携式计算机供电的壁装电源插座。在长途飞行中,我总希望电池能够一直支撑到目的地,因此,我经常会意识到在长途飞行中我所付出的是什么。然而,我是凭直觉和环境要求来选择应用程序的。例如,如果电扇在运转,并且应用程序性能不够好,我就知道系统负载过重,而电池将比预期更早用完。然而,我希望有些事情更科学一些,而不是仅仅将手放在机器上,努力去感觉电流的强度。确实有一些完善的软件能够检测各种应用程序的电源使用情况,仅通过监视一些关键的性能计数器,我就能计算出这些应用程序较为近似的耗电率。 统计 应用程序 详细信息 physDiskCounter = new 这只是访问原始性能计数器值,从中减去以前的值得到增加值,然后返回结果。 读取网络信息也存在问题,但其原因并不相同。首先,我确实希望只监视无线网卡,因为无线网卡最消耗电能。当然,我不希望诸如环回适配器之类的硬件也消耗电能。我可以使用一些较低级别的 API 来查找无线网络适配器,但是,幸运的是,2.0 版的 Framework 含有一些新的网络类,可以简化上述操作: // Look for a "real" network interface, and preferably 可以看到 NetworkInterface 类公开了关于每个网络接口的大量信息。尤其是它能够很轻松地查找到 802.11 接口。然而(没有任何事情永远都是轻而易举能做到的),此方法返回基于 Intel 21140 的 PCI Fast Ethernet Adapter(通用)- Packet Scheduler Miniport,以便于对适配器进行描述。但是,其显示的实名却为 Intel 21140-Based PCI Fast Ethernet Adapter [Generic] - Packet Scheduler Miniport。注意单词“通用”所使用的是方括号,而不是圆括号。我不能确定 NetworkInterface API 返回圆括号的原因,但是,如果尝试使用 PerformanceCounter 类或 WMI 来读取该计数器,系统将不会发现上述实名,因为上述名称确实并不匹配。 我还遇到过与 PerformanceCounter 有关的另一问题。 从外表上看,好像是将上述实例名称截断为 64 个字符,所以,在我使用 Intel 21140-Based PCI Fast Ethernet Adapter [Generic] - Packet Scheduler Miniport 时,系统只采用 Intel 21140-Based PCI Fast Ethernet Adapter [Generic] - 数据包 S。最后面的 17 位字符被删除,并且 PerformanceCounter 类引发异常,显示其无法找到我所查找的内容。 新(相对)的 MSDN Product Feedback Center 填补了这项空白。我使用它来查找错误,结果发现此错误[URL=http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=00cc94e9-274b-43e6-bb5f-f4592ff21ee7]已报告[/URL],并且计划将在 Visual Studio 2005 的 Beta 版本中予以修复。 最后,此错误也返回到 WMI 以读取该性能计数器。 这很平稳 降低一些应用程序耗电量确实有效的方法是,如果该应用程序不可见,则停止提供逻辑电路。这一操作确实非常简单(但是几乎没有任何应用程序会采取此方法,对此您可能会感到奇怪): if (Visible) 换句话说,如果该窗体不可见,则不要在其上呈现条线图。仅这一更改就可将电能消耗从占 CPU 的 6% 下降到占 CPU 的 2% 左右。最小化应用程序时,此应用程序仍使用通知图标控件为系统任务栏提供条线图: Bitmap iconBitmap = new Bitmap(16, 16); 正如您所看到的,可以非常容易地生成位图,然后使用 GetHicon 方法在通知图标中显示位图。为系统任务栏提供 256 像素的图像所消耗的电能比为该窗体提供 11500 像素图像消耗的电能少很多。 然而,我很快注意到另一问题:由于通知图标只是分辨率不同,您并没有看到其中以每秒钟 10 次的速率进行的物理变化,因此,我意识到最小化电源监视器后,可以降低呈现速率: private void Form1_VisibleChanged(object sender, EventArgs e) 随着这些更改的生效,最小化后,电源监控器现在所消耗的平均电能不到 CPU 消耗电能的 1%,同时还能提供总计电能使用情况的直观指示。通过简单的双击操作就可以显示有关详细信息的完整窗体。此时耗电量非常低,因此即使让电源监控器一直运行也不会显著影响电池的使用寿命。 此时,我可以使用一个应用程序来轻松地对运行什么作出智能选择,从而节省电能。此外,尽管该应用程序并不监视单个进程,但我发现它对于识别耗电量高的进程很有帮助。 Sean Campbell,[URL=http://www.3leafdev.com/]3 Leaf Development[/URL] [URL=http://msdn.microsoft.com/coding4fun/inthebox/powermonitor/default.aspx]转到原英文页面[/URL] |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
7,283.203ms |