到目前為止,我一直使用DateTime.Now時間戳記,但是我注意到,如果您DateTime.Now循環(huán)打印,您會發(fā)現(xiàn)它以大約5%的離散跳躍遞增。15毫秒 但是對于我的應用程序中的某些情況,我需要獲得最準確的時間戳,最好是滴答(= 100 ns)精度。有任何想法嗎?更新:顯然,StopWatch/ QueryPerformanceCounter是要走的路,但是它只能用于測量時間,因此我在考慮DateTime.Now在應用程序啟動時調用,然后才StopWatch運行,然后將經(jīng)過的時間從添加到從StopWatch返回的初始值中DateTime.Now。至少那應該給我準確的相對時間戳,對嗎?您如何看待(黑客)?注意:StopWatch.ElapsedTicks不同于StopWatch.Elapsed.Ticks!我使用前者假設1 tick = 100 ns,但在這種情況下1 tick = 1 / StopWatch.Frequency。因此,要獲取等于DateTime的報價,請使用StopWatch.Elapsed.Ticks。我只是很難學到的。筆記2:使用StopWatch方法,我注意到它與實時不同步。大約10個小時后,它領先了5秒鐘。因此,我想每個X都必須重新同步一次,其中X可能是1小時,30分鐘,15分鐘等。我不確定重新同步的最佳時間間隔是多少,因為每次重新同步都會改變偏移量,長達20毫秒。
3 回答

慕姐8265434
TA貢獻1813條經(jīng)驗 獲得超2個贊
如果實際上(您的評論)真正關心的是一個唯一的時間戳,該時間戳以嚴格的升序分配,并且盡可能與系統(tǒng)時間相對應,則可以嘗試以下替代方法:
public class HiResDateTime
{
private static long lastTimeStamp = DateTime.UtcNow.Ticks;
public static long UtcNowTicks
{
get
{
long orig, newval;
do
{
orig = lastTimeStamp;
long now = DateTime.UtcNow.Ticks;
newval = Math.Max(now, orig + 1);
} while (Interlocked.CompareExchange
(ref lastTimeStamp, newval, orig) != orig);
return newval;
}
}
}
- 3 回答
- 0 關注
- 785 瀏覽
添加回答
舉報
0/150
提交
取消