2011-06-05 12 views
1

をプロファイリングのための.NETメソッドをフック:
Profiling a method in C# to know how long does it take to runが可能な重複目的

私はそれがメソッドを実行するのに時間がかかりますどのくらいの時間をチェックする必要があります。

例えば、私のプロジェクトでGetTypes()メソッドをusing System.Reflectionに実行するのにかかる時間を知る必要があります。

最も簡単な方法は、プロファイラを実行しているかGetTypesを使用しています Stopwatchすべてのソースファイルを挿入される可能性があります
foreach (Type t2 in a.GetTypes()) 
{ 
    Console.WriteLine(t2); 
} 

()が、私は前と実行後にストップウォッチを開始し、終了するGetTypesフッキング()メソッドを使用することができます願っていますGetTypes()メソッド。

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

C#/ NET(Mono)でこれを行うことはできますか?そうでない場合は、ソースコードを変更するか、プロファイラを実行する以外の選択肢がありますか?あなたの例では

+0

@Michael Petito:私は意図的に2つの質問をしました。この質問は、何かをプロファイルするためのメソッドをフックすることです(コメントを見ることができますか、またはこれを指定するにはプロファイラを実行しません)。 – prosseek

+0

@Michael Petito:プロファイラが最善の方法かもしれませんが、私はいくつかのアクションを行う必要があります。この場合、コードを変更する必要があります。 – prosseek

答えて

1

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

あなたは、同様Console.WriteLineをし、他のすべてを測定している、GetTypesよりもはるかに多くを測定しています。

フック(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のソースをダウンロードして、どのようにプロファイラを作ったかを調べてみてください。