连接.NET方法以进行性能分析

时间:2011-06-05 17:24:04

标签: c# .net mono profiler event-hooking

  

可能重复:
  Profiling a method in C# to know how long does it take to run

我需要检查运行方法需要多长时间。

例如,我需要知道在我的项目中GetTypes()中运行using System.Reflection方法需要多长时间。

foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}

最简单的方法可能是运行探查器或插入Stopwatch所有使用GetTypes()的源文件,但我希望我可以使用挂钩GetTypes()方法启动并在运行前后退出秒表GetTypes()方法。

sw = Stopwatch.StartNew();
foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}
sw.Stop();

我可以使用C#/。NET(Mono)吗?如果没有,除了修改源代码或运行探查器之外,还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

用你的例子:

sw = Stopwatch.StartNew();
foreach (Type t2 in a.GetTypes())
{
    Console.WriteLine(t2);
}
sw.Stop();

您测量的远远超过GetTypes,您正在测量Console.WriteLine以及其他所有内容。

编写一个钩子(比如Moles)可能会对性能产生太大的影响(但是我必须承认我之前从未做过类似的事情,但我确实注意到在运行具有Moles的单元测试时性能的差异)。 / p>

最简单的选择(也是最便宜的)是下载其中一个(免费)分析器:

AQTime(免费版)http://smartbear.com/products/free-tools/aqtime-standard/

SharpDevelop(有一个分析器):http://www.icsharpcode.net/opensource/sd/download/

XTE Profiler http://www.xteprofiler.com

其中任何一项都会为您提供详细信息。但是,如果您真的想要自己动手,请下载SharpDevelop的来源并尝试弄清楚他们是如何制作探查器的。