(忽略優化的編譯器標誌)DateTime精度?
是否可以讓這段代碼在某些系統上進入塊?
if (Datetime.Now!=Datetime.Now)
{
...
}
我的意思是,它是如何評估這裏的值? (是按順序)?
有沒有什麼情況下可能爲真?
再次,忽略的優化標誌。
(忽略優化的編譯器標誌)DateTime精度?
是否可以讓這段代碼在某些系統上進入塊?
if (Datetime.Now!=Datetime.Now)
{
...
}
我的意思是,它是如何評估這裏的值? (是按順序)?
有沒有什麼情況下可能爲真?
再次,忽略的優化標誌。
DateTime.Now
電話:
public static DateTime Now
{
get
{
return DateTime.UtcNow.ToLocalTime();
}
}
其內部調用:
public static DateTime UtcNow
{
get
{
long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));
}
}
其中GetSystemTimeAsFile是WindowsAPI函數返回系統時鐘信息。精準度取決於系統,所以。
如果你有一個延遲,針對不同的之間的一些原因得到(DateTime.Now
)它可能產生足夠的不同結果是相等比較失敗。但我個人從未遇到過這種情況。
人力資源招聘:-) hhhh –
好吧,不:)如果有人會問這樣的問題,我只能給**猜測**,不知道在這之後,前面的人會對我有什麼瞭解:) – Tigran
DateTime
的精度爲100ns。但是在典型的實現中,DateTime.Now
每隔幾毫秒只能改變一次。
Datetime.Now != Datetime.Now
可能是真實的,但它不太可能發生。這是您經常在多線程代碼中看到的典型競態條件。即不應依賴DateTime.Now
不改變,而是將副本存儲在局部變量中。內部
它與計算機頻率時鐘有關嗎? –
這涉及到一個內部系統計時器,影響定時器,'Thread.Sleep','DateTime.Now','Environment.TickCount',線程切換... – CodesInChaos
如果我沒有記錯'DateTime.Now'是相對昂貴的它使用IO。存儲副本的另一個原因。編輯:這是我指的鏈接:http://stackoverflow.com/q/10899709/284240 –
在一個非常緩慢的系統上,我想。您只需要在通話之間留出1個嘀嗒聲,以使它們與衆不同。 – leppie
我喜歡這個答案http://stackoverflow.com/a/2143784/570150 – V4Vendetta
@leppie其中「tick」表示系統計時器正在運行,而不是代表100ns的「Tick」單元。 – CodesInChaos