-
2009-09-11
是苦还甜,MacCoffee
-
2009-09-09
从HELP到HELLO:金氏漂流记
-
2009-09-08
再回首●还有那无尽的长路伴着我
再回首
再回首
云遮断归途
再回首
荆棘密布
今夜不会再有难舍的旧梦
曾经与你共有的梦
今后要向谁诉说
再回首
背影已远走
再回首
泪眼朦胧
留下你的祝福
寒夜温暖我
不管明天要面对多少伤痛和迷惑
曾经在幽幽暗暗反反复复中追问
才知道平平淡淡从从容容是最真
再回首恍然如梦
再回首我心依旧
只有那无尽的长路伴着我 -
2009-09-08
与7共舞:性能计数器进行性能分析
作为程序员,谁都希望自己的软件性能优异,运行如飞。但是当我们在看到自己开发的软件像蜗牛一样慢吞吞地运行,半天没有反应的时候,我们常常会有这样一些疑问:
“我的系统都在忙些什么?CPU在干啥?”
“为什么我的软件性能表现这么低下?”
“哪里才是软件的性能瓶颈?什么代码导致了软件的性能低下?”
“软件运行到了什么状态?”
面对这些问题,程序员们都在想,要是有个软件仪表仪表,就像汽车的仪表盘一样,能够实时向我们报告系统和软件的运行状态就好了!现在,在Windows 7中,程序员们的这个梦想成为了现实。通过Windows 7所提供的Performance Counters,Event Tracing for Windows (ETW) ,Windows Management Instrumentation以及Windows Performance Toolkit,我们可以实时地获得系统和在其上运行的各种软件的性能状态信息,圆满地回答上面这些问题。利用这些丰富的状态信息,我们可以对应用程序进 行诊断调试,性能分析,找到性能瓶颈,从而对其进行性能调优,给蜗牛软件插上飞的翅膀。

图1 我不是蜗牛,我是飞牛
关于性能分析的这十八般武器各有所长,这里我们先介绍性能计数器。
Performance Counters(性能计数器)
当我们在开发一些对性能期望较高的软件的时候,简单高效的性能计数器对发现软件中的性能瓶颈是很有价值的。虽然我们可以自己实现简单的性能计数器,但是,使用Windows操作系统本身所提供的Performance Counters(性能计数器),我们可以获得更多得天独厚的优势。
性能监视,是Windows NT引入的一种系统功能。从Windows NT以后,Windows操作系统总是集成了各种性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种性能对象提供了数百个性能计数器。性能对 象,就是被性能计数器监视的对象,我们通常比较关心的监视对象主要有Processor、Process、Memory、TCP/UDP/IP /ICMP、Physical Disk等。性能计数器通常提供操作系统、应用程序、服务、驱动程 序等的性能相关信息,以此来分析系统瓶颈和对系统及应用程序性能进行诊断和调优。除了针对操作系统本身,通过性能计数器机制,我们也可以在应用程序或者是 操作系统组件中向性能监视器(Performance Monitor)报告一些与性能有关的统计信息,以此来查看软件的性能信息,对其进行诊断和调优。
在Windows 7中,微软对性能计数器做了进一步的改进和优化。例如,采用了新的2.0版本的核心模块API、采用XML定义、更加强大的性能、更高的可扩展性和鲁棒 性、增加了多个系统计时器等等。同时,为了方便系统管理员进行管理,还增加了PowerShell对计时器日志文件的处理功能等等,使得性能计数器的功能 大大增强。
-
2009-09-04
与7共舞:对库进行编程
【IT168 专稿】在上文中,我们简要地介绍了Windows 7所引入的新的文件管理方式:库(Library)。介绍了库的缘起,库的表现和实质。那么相信大家会接着问:如何对库进行操作呢?如何让我们自己开发设 计的应用程序支持库这一新的文件管理方式?或者是如何让我们的应用程序更好地利用这一新的文件管理特性?
对库进行编程在Windows 7操作系统中,我们可以手动地对库进行管理,进行库的创建,文件夹的添加和删除等等。但是作为程序员,我们更加关心的是如何以编程的方式对库进行操作。为了帮助我们在应用程序中使用库这种新的文件管理方式,Windows 7为我们提供了一组API用于库的编程开发。

图1 与库相关的API
其中,位于最顶层的用户界面API包括我们之前提到的通用文件对话框CFD,导航栏树形控件等等。使用新的用户界面API,我们可以调用支持库的新版通用文件对话框,从而让我们的应用程序在打开或者保存文件时,可以支持库这一新的特性。
private void button1_Click(object sender, EventArgs e)
{
string strPath;
// 创建新版的通用保存文件对话框
System.Windows.Forms.SaveFileDialog _fd = new System.Windows.Forms.SaveFileDialog();
// 设置对话框的各种属性
fd.Title = "请选择文件保存的位置";
fd.FileName = "[选择文件夹…-]";
fd.Filter = "Library|no.files"; // 设置可选项,只能选择Library
// 显示对话框
if (_fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// 获取用户选择的结果
string dir_path = System.IO.Path.GetDirectoryName(_fd.FileName);
if (dir_path != null && dir_path.Length > 0)
{
// 传递用户选择的路径
strPath = dir_path;
}
}
// 利用用户选择的路径进行后继处理
}通过使用新版的通用文件对话框CFD,我们可以轻松的让我们的应用程序支持库这一新的文件管理方式。
除了用户界面API,我们重点关注的是位于中间的Shell API。利用Shell API,我们可以对库进行管理,实际上就是通过Shell API修改.library-ms这个文件,当这个文件被修改后,系统会读取这个文件的信息对库进行重新组织。这组Shell API包装了多个COM对象,利用这些对象,我们可以对库进行操作,其中几个比较常用的对象是:
•IShellLink 这个对象代表到文件、 文件夹,或可执行文件的一个链接
•IShellFolder 对象实际上代表着一个文件夹对象,我们可以通过遍历IShellFolder对象,访问这个文件夹下的所有内容,检索文件夹中的项目的显示名称、 分析文件夹的显示名称和获取文件夹下的项目 ID 列表等等
•IShellLibrary是Windows 7新引入的一个对象,它与一个库相对应。通过这个对象,我们可以对库进行各种操作。
另外,Shell API也提供了多个辅助函数用于对库进行操作,比如:
•创建库
•打开一个已经存在的库
•添加文件夹到库中或者删除一个库中的文件夹
•获得一个库的文件夹列表
•获得或者设置库的各种选项
•获得或者设置库的图标
通过这些Shell API,我们完全可以操作系统中的库,对其进行操作和管理。
阅读全文:与Windows7共舞:对库进行编程













