可能重复:
在C#中分析一个方法以了解运行需要多长时间
我需要检查运行一个方法需要多长时间。
例如,我需要知道在我的项目中,在using System.Reflection
中运行GetTypes()
方法需要多长时间。
foreach (Type t2 in a.GetTypes())
{
Console.WriteLine(t2);
}
最简单的方法可能是运行profiler或插入Stopwatch
所有使用GetTypes()的源文件,但我希望我可以在运行GetTypes)方法之前和之后使用挂钩GetType()方法来启动和退出秒表。
sw = Stopwatch.StartNew();
foreach (Type t2 in a.GetTypes())
{
Console.WriteLine(t2);
}
sw.Stop();
我可以用C#/.NET(Mono)来做这件事吗?如果没有,除了修改源代码或运行探查器之外,我还有其他选择吗?
使用您的示例:
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.icsharpcode.net/opensource/sd/download/
XTE档案器http://www.xteprofiler.com
其中任何一个都会为您提供详细信息。但是,如果你真的想自己做,请下载SharpDevelop的源代码,并尝试弄清楚他们是如何制作探查器的。