1

可能重复:
分析 C# 中的方法以了解运行需要多长时间

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

例如,我需要知道在我的项目中运行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) 做到这一点吗?如果没有,除了修改源代码或运行分析器之外,我还有其他选择吗?

4

1 回答 1

1

用你的例子:

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

你测量的不仅仅是 GetTypes,你测量的是 Console.WriteLine 和其他所有东西。

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

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

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

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

XTE Profiler http://www.xteprofiler.com

其中任何一个都会为您提供详细信息。但如果你真的想自己做,请下载 SharpDevelop 的源代码并尝试弄清楚他们是如何制作分析器的。

于 2011-06-06T10:59:38.770 回答