可能重复:
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)吗?如果没有,除了修改源代码或运行探查器之外,还有其他选择吗?
答案 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的来源并尝试弄清楚他们是如何制作探查器的。