5

多くの関数の実行にかかる時間を計算できるようにしたいと思います。ある種のストップウォッチクラスを使うことを考えていました。各関数呼び出しの前後にstart/stopを呼び出すことができますが、それは私にはひどく醜いようです。ストップウォッチクラスなしでこれを行う方法はありますか?Reflectionsクラスの何かがこれを助けることができますか?

ご入力いただきありがとうございます。

4

5 に答える 5

3

私はあなたがPostSharpの方法を試さなければならないと思いますhttp://www.postsharp.org/

このサンプルのコードを変更する:

public class ProfileMethodsAttribute : OnMethodBoundaryAspect 
{ 
  public override void OnEntry( MethodExecutionEventArgs eventArgs) 
  { eventArgs.MethodExecutionTag = Stopwatch.StartNew();  } 

  public override void OnExit( MethodExecutionEventArgs eventArgs) 
  { 
     // Here u can get the time
     Console.WriteLine(((Stopwatch)eventArgs.MethodExecutionTag).ElapsedMilliseconds);
  } 
}

あなたはどんな方法でも休暇を取ることができます

于 2010-01-06T16:16:24.297 に答える
2

パフォーマンスタグのスポンサーをお勧めします... RedGateAnts。アプリを実行し、プロファイリング中にアプリがヒットするすべての行とすべてのメソッドのパフォーマンス情報を提供するデモを入手できます。

于 2010-01-06T15:08:15.403 に答える
1

メソッドの装飾に使用される属性、つまりAOPスタイルにストップウォッチクラスを配置できます。これをチェックしてください

于 2010-01-06T15:43:15.850 に答える
1

コードプロファイリングの使用を検討する必要があると思います...AntsProfilerなどの外部アプリケーションを使用してコードをプロファイリングますか?AntsはRedGateの製品であり、無料ではありませんが、無料/オープンソースのアプリもいくつかあると思います。

ここにいくつかの無料/オープンソースプロファイラー...

あちこちでメソッドをストップウォッチすることは問題ありませんが、ソリューション内のすべてのメソッドに対してそれを実行しようとすると、すぐに扱いにくくなります。

于 2010-01-06T15:08:42.483 に答える
0

さまざまなタイマーがあります。System.Timers.Timerそのようなものの1つになります。しかし、前の答えが示唆しているように、これがあなたが実際に対処しようとしている問題に対する正しい解決策であると確信していますか?

于 2010-01-06T15:08:24.903 に答える