QueryPerformanceCounter()
およびStopwatch.GetTimestamp()
はどちらも、プロセッサの1つからティックカウントを返します。返された64ビットの整数値を一意のIDとして使用したいと思います。これらの関数がプロセス内で複数回呼び出されたときに同じ値を返す可能性があるのだろうかと思います。QueryPerformanceCounter()またはStopwatch.GetTimestamp()は、後続の呼び出しで同じ値を返すことができますか?
プロセスはたかだか数時間しか実行されず、これらの一意のIDは一時的にしか使用されません。たとえば、データベースに保存されません。上記の関数は数回呼び出されますが、間には他の関数呼び出しがあります。
マザーボードは高性能タイマーをサポートしていない可能性があると述べています。私のコードは、32ビットまたは64ビットのサーバハードウェア上でのみ動作し、高性能タイマは常にサポートされていると私は思っています(私は確信していません)。
私はそれをテストするための小さなテストプログラムを書くことができましたが、そのテストは自分のコンピュータ上でのみ有効なので、より確かな答えがあればそれを探しています。
編集:私は、これらの機能は、ユニークなIDを生成するためにを設計しではありません知っているが、限り、彼らは常に増加する値を生成するように、それは大丈夫です。私は技術的な理由だけでなく、好奇心からもこの質問をしています。
私はそれらがユニークなIDを返すのではないことを知っていますが、値が常に増加していればそれは問題ありません。なぜ彼らは同じ価値を返すと思われるのですか? – xxbbcc
両方とも、タイマーの現在の値を表示します.2つの後続の呼び出しは、同じ「時間」を表示するようにします。編集された回答のサンプルを実行して結果を表示します。 –
@xxbbccユニークなIDを生成するように設計されたメソッドを使用するのが簡単であるときに、なぜそうするように設計されていないメソッドを使用するのか? – Yaur