多くの関数の実行にかかる時間を計算できるようにしたいと思います。ある種のストップウォッチクラスを使うことを考えていました。各関数呼び出しの前後にstart/stopを呼び出すことができますが、それは私にはひどく醜いようです。ストップウォッチクラスなしでこれを行う方法はありますか?Reflectionsクラスの何かがこれを助けることができますか?
ご入力いただきありがとうございます。
多くの関数の実行にかかる時間を計算できるようにしたいと思います。ある種のストップウォッチクラスを使うことを考えていました。各関数呼び出しの前後にstart/stopを呼び出すことができますが、それは私にはひどく醜いようです。ストップウォッチクラスなしでこれを行う方法はありますか?Reflectionsクラスの何かがこれを助けることができますか?
ご入力いただきありがとうございます。
私はあなたが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);
}
}
あなたはどんな方法でも休暇を取ることができます
パフォーマンスタグのスポンサーをお勧めします... RedGateAnts。アプリを実行し、プロファイリング中にアプリがヒットするすべての行とすべてのメソッドのパフォーマンス情報を提供するデモを入手できます。
メソッドの装飾に使用される属性、つまりAOPスタイルにストップウォッチクラスを配置できます。これをチェックしてください
コードプロファイリングの使用を検討する必要があると思います...AntsProfilerなどの外部アプリケーションを使用してコードをプロファイリングしますか?AntsはRedGateの製品であり、無料ではありませんが、無料/オープンソースのアプリもいくつかあると思います。
ここにいくつかの無料/オープンソースプロファイラー...
あちこちでメソッドをストップウォッチすることは問題ありませんが、ソリューション内のすべてのメソッドに対してそれを実行しようとすると、すぐに扱いにくくなります。
さまざまなタイマーがあります。System.Timers.Timer
そのようなものの1つになります。しかし、前の答えが示唆しているように、これがあなたが実際に対処しようとしている問題に対する正しい解決策であると確信していますか?