6

今、私たちはこのようなものを使用しています

        stopWatch.Start();            
        try
        {
            method();
        }
        finally
        {
            stopWatch.Stop();
        }

これは同期メソッドでは問題なく機能しますが、一部は非同期で実行されるため、複数のスレッドが実行されていると時間がずれます。現在のスレッドで費やされた時間のみを測定する System.Diagnostics.Stopwatch に相当するものはありますか?

内部ベータ (アルファ?) リリースで長期間にわたってデータを収集したいと考えており、プロファイラーでフルタイムで実行することは現実的なオプションではありません。

編集: 明確にするために、method() の実行に費やされた時間のみを測定したいので、Method1() と Method2() の両方が同時に開始し、Method1 が 2 秒マークで終了し、Method2 が 4 秒マークで終了した場合、 Method1 の実行に約 1 秒を費やし、Method2 の実行に約 3 秒を費やしたことを教えてくれるものが必要です (最初の 2 秒間は (シングル コアと仮定) プロセッサを均等に共有したと仮定します。

4

4 に答える 4

2

うーん、この質問に対するJon Skeetの回答から:

スレッド化されたアプリケーションでのコード行の正確なタイミング、C#

また、この記事:

http://lyon-smith.org/blogs/code-o-rama/archive/2007/07/17/timing-code-on-windows-with-the-rdtsc-instruction.aspx

これを行う簡単な方法はないようです。

于 2008-12-17T17:06:19.630 に答える
1

ストップウォッチは、1 つのスレッドだけで費やされた時間を測定する必要があります。すべてのスレッドで個別のインスタンスを実行する必要があります。これにより、おそらくあなたが望むものに近い結果が得られます。

あるいは (一部のメソッドだけでなく、アプリケーション全体を監視する場合に推奨されるオプション)、すぐに使用できるさまざまなパフォーマンス カウンターがあります (それらは .Net ランタイムによって更新されます)。Web には多くの情報があります。msdn から始めることができます: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx

于 2008-12-17T16:38:13.790 に答える
1

としてマークされた StopWatch インスタンスを持つ StopWatch のラッパーを作成することで、同様の問題を解決したことがありますThreadStatic

または、購入できる Ants Profiler などのツールがあります。

于 2008-12-17T16:50:57.103 に答える
0

これはクールなツールです: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

于 2009-10-16T09:58:50.120 に答える