65.9K
CodeProject 正在变化。 阅读更多。
Home

性能测试

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.32/5 (9投票s)

2005年9月29日

2分钟阅读

viewsIcon

28388

downloadIcon

194

通过命令行工具将性能钩子附加到程序集。

引言

上周,我被要求改进我们的 ASP.NET 应用程序的性能。由于缺乏性能测试经验,并且阅读了许多文章后,我决定从一些流行的可用工具开始。我很快发现,由于某种原因,这些工具提供的指标可能会有偏差,在某些情况下甚至明显不正确。

解决方案

我真正想做的是创建一个可释放类,并将每个方法的内容包装在一个 using 语句中。

例如

private void Form1_Load(object sender, System.EventArgs e)
{
   MessageBox.Show("Test");
}

变成

private void Form1_Load(object sender, System.EventArgs e)
{
   using (PerformanceMonitor.PerformanceMonitor pm = 
               new PerformanceMonitor.PerformanceMonitor())
   {
       MessageBox.Show("Test");
   }
}

PerformanceMonitor 类的构造函数和析构函数可以输出到文本文件/事件日志/等。PerformanceMonitor 可以根据需要进行自定义。

我认为一定有更简单的方法来添加性能日志记录机制,并且比我之前尝试过的工具运行得更好。

结果是一个实用程序,它使用 ILDASM 拆解程序集,修改 MSIL,然后使用 ILASM 重新组装 MSIL。最终结果是每个方法都用 using 语句包装。

如何使用

在运行该实用程序之前,必须编译 PerformanceMonitor 类,并将其复制到与要修改的程序集相同的目录中。

该实用程序和示例 PerformanceMonitor 类已附上。该实用程序的命令行应用程序用法为:AttachPerformanceHooks.exe TestAssembly.dll

此实用程序可以附加到任何未混淆、未签名的程序集。到目前为止,使用附加的 PerformanceMonitor 获得的结果没有偏差,也没有给出不正确的结果。

PerformanceMonitor 类将输出到通过应用程序设置提供的目录中的文本文件:“PerformanceMonitor.LogDir”。

注意:对于较大的程序集(例如 90 MB MSIL),该实用程序可能需要一段时间才能运行。

结论

到目前为止,我使用它已经一周了,它使我的工作变得更加容易。我希望您也觉得此实用程序有用。

参考文献

© . All rights reserved.