0

私たちはいくつかのパフォーマンスの問題をデバッグしていて、ストップウォッチからいくつかの奇妙な結果に気づきました。

  1. Webサービスを呼び出すクライアントがあります
  2. ストップウォッチを使用して、Webサービスのサービスレイヤーで時間を記録します
  3. 下位層の時刻をdatetime.now.ticksで記録します

レイヤー2は、2行のロギングを備えた単なるパススルーレイヤーです。

記録された時間は次のとおりです。

  1. 110ミリ秒
  2. 52125ミリ秒
  3. 125ミリ秒

1ミリ秒まで正確なAPIはありませんが、2は1未満であると予想していました。

サービスコールごとに新しいストップウォッチを作成するため、これは古いストップウォッチタールが再起動された時間ではありません。

なぜ私たちがこれらの数字を取得しているのか誰もが知っていますか?

編集

2と3は同じマシンと同じアプリドメイン上にあります

ストップウォッチコードは次のとおりです。

            var sw = new Stopwatch();
            sw.Start();

            //code to call layer 3

            sw.Stop();
            orchestrationContext.LogOperationTime(functionName, sw.ElapsedMilliseconds);

レイヤー3での時間のロギング

    protected DateTime StartTime { get; set; }
    StartTime = DateTime.Now;

    // code 

    new TimeSpan(DateTime.Now.Ticks - StartTime.Ticks).Milliseconds

1のロギングは別のマシン上にあり、Websphereを使用してロギングします。

4

2 に答える 2

3

さて、2番目のコードサンプルが返されるはずです。これTimeSpan.TotalMillisecondsを使用Millisecondsすると、サブ2番目の部分が取得されます。

StopWatchレイヤー2コードと同じスタイルで、レイヤー3コードでを使用しないのはなぜですか?より正確です。

質問のタイトルは「ストップウォッチの正しさ」ですが、バナナと桃やリンゴを比較しているようです。StopWatchハードウェアまたはオペレーティングシステムでサポートされている場合はタイマーを使用します。サポートされていない場合は、約15ミリ秒の粒度を提供するHighResolutionタイマーにフォールバックします。System.Timer

StopWatchWebSphereを使用する方法や使用するかどうかについてコメントすることはできませんが、他の高精度のタイムソースへのAPIを使用しない限り、 より正確なタイミングを提供することはできません。

于 2012-08-28T09:16:18.580 に答える
1

私が推測したように:

new TimeSpan(DateTime.Now.Ticks - StartTime.Ticks).TotalMilliseconds 

TotalMillisecondsは、ミリ秒単位でタイムスパンを取得します

ミリ秒は、タイムスパンのミリ秒部分を取得します

于 2012-08-28T09:10:18.807 に答える