가이 코드는 일부 시스템에서 블록을 입력 것이라고 할 수있다 (최적화 된 컴파일러 플래그를 무시)?
if (Datetime.Now!=Datetime.Now)
{
...
}
내 말은, 여기 값을 어떻게 평가합니까? (순서대로)?
이 일 수있는 상황이 있습니까?
다시 은 최적화 플래그를 무시합니다.
가이 코드는 일부 시스템에서 블록을 입력 것이라고 할 수있다 (최적화 된 컴파일러 플래그를 무시)?
if (Datetime.Now!=Datetime.Now)
{
...
}
내 말은, 여기 값을 어떻게 평가합니까? (순서대로)?
이 일 수있는 상황이 있습니까?
다시 은 최적화 플래그를 무시합니다.
DateTime.Now
통화 :
public static DateTime Now
{
get
{
return DateTime.UtcNow.ToLocalTime();
}
}
내부 호출은 GetSystemTimeAsFile 시스템 클럭 정보를 반환하는 함수이다 WindowsAPI
public static DateTime UtcNow
{
get
{
long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));
}
}
. 시스템에 따라 달라질 수 있습니다.
지연이있는 경우 다른 도착 (DateTime.Now
) 사이의 어떤 이유로 인해 일 수 있습니다.은 등호 비교자가 실패 할 정도로 충분히 다른 결과를 생성합니다. 그러나 저는 개인적으로 제 경험에서 이런 종류의 상태를 결코 만납니다.
인사 모집 :-) hhhh –
글쎄, 아니 :) 만약 누군가가 이런 질문을한다면, 나는 ** 추측 **을 줄 수있다. 앞에서 녀석이 나에 대해 어떻게 생각하는지 모르겠다. :) – Tigran
DateTime
의 정밀도는 100ns입니다. 그러나 일반적인 구현에서는 DateTime.Now
만 몇 밀리 초마다 변경됩니다.
Datetime.Now != Datetime.Now
은 사실 일 수 있지만 극히 드문 일입니다. 이것은 멀티 스레드 코드에서 자주 볼 수있는 전형적인 경쟁 조건입니다. 즉, 변경하지 않고 DateTime.Now
에 의존해서는 안되며 복사본을 로컬 변수에 저장해야합니다. 내부적
어떻게 든 컴퓨터 주파수 클록과 관련이 있습니까? –
그것은 타이머,'Thread.Sleep','DateTime.Now','Environment.TickCount', thread switching ...에 영향을 미치는 내부 시스템 타이머와 관련이 있습니다. – CodesInChaos
'DateTime.Now'는 IO를 사용합니다. 사본을 저장할 또 다른 이유. 편집 : 다음은 내가 언급 한 링크입니다 : http://stackoverflow.com/q/10899709/284240 –
정말 느린 시스템에서 나는 추측합니다. 서로 다른 통화를하기 위해 통화 사이에 1 tick 스톨이 필요합니다. – leppie
나는이 대답을 좋아했다. http://stackoverflow.com/a/2143784/570150 – V4Vendetta
@leppie "tick"은 시스템 타이머가 실행되는 것을 의미하고, Tick은 100ns를 나타내지 않는다. – CodesInChaos