Stopwatch.GetTimestamp() を使用すると、戻り値を記録し、それを呼び出して前の戻り値と比較し続けると、最終的には元の値よりも小さい値が返されることがわかりますが、予測できません。
これは予想される動作ですか?
製品コードでこれを行う目的は、マイクロ秒の正確なシステム時間を確保することです。
この手法では、DateTime.UtcNow を呼び出し、Stopwatch.GetTimestamp() を originalUtcNow および originalTimestamp としてそれぞれ呼び出します。
その時点から、アプリケーションは単純に Stopwatch.GetTimestamp() を呼び出し、Stopwatch.Frequency を使用して originalTimestamp 変数との差を計算し、その差を originalUtcNow に追加します。
次に、出来上がり...効率的で正確なマイクロ秒の DateTime です。
しかし、Stopwatch.GetTimestamp() が低い数値を返すことがあります。
めったに起こりません。そんな時は「リセット」して継続しよう、というのが私たちの考えです。
ただし、Stopwatch.GetTimestamp() の精度を疑ったり、.Net ライブラリにバグがあるのではないかと疑ったりします。
これに光を当てることができるなら、そうしてください。
参考までに、現在のタイムスタンプ値、頻度、および long.MaxValue に基づいて、ハードウェアの問題でない限り、寿命中にロールオーバーする可能性は低いようです。
編集:現在、この値を「スレッドごと」に計算し、「クランプ」してコア間のジャンプを監視してリセットしています。