none
TimeSpan 및 Tick 간격이 0이 되는이유 RRS feed

  • 질문

  • //long startTick = DateTime.Now.Ticks;
                DateTime startTime = DateTime.Now;
    
                for(int xIndex = 0; (xIndex < temp.Length - 1) && flag; xIndex++)
                {
                    for(int yIndex = (xIndex + 1); yIndex < temp.Length; yIndex++)
                    {
                        if (temp[xIndex] == temp[yIndex])
                        {
                            flag = false;
                            indexValue = xIndex;
                            value = temp[xIndex];
                            break;
                        }
                    }
                }
    
                //long endTick = DateTime.Now.Ticks;
                DateTime endTime = DateTime.Now;
    
                Console.WriteLine(endTime - startTime);
    
                //long startTick2 = DateTime.Now.Ticks;
    
                DateTime startTime2 = DateTime.Now;
    
                int[] temp2 = temp.Clone() as int[];
    
                Array.Sort(temp2);
    
                for(int xIndex = 0; xIndex < temp2.Length - 1; xIndex++)
                {
                    if(temp2[xIndex] == temp2[xIndex + 1])
                    {
                        break;
                    }
                }
    
                //long endTick2 = DateTime.Now.Ticks;
    
                DateTime endTime2 = DateTime.Now;
    
                Console.WriteLine(endTime2 - startTime2);

    처럼 코딩을 했을 때 Ticks의 차이를 계산하든 TimeSpan으로 하든 간에 시간간격차가 처음 계산할 때는 정상적으로 측정 되지만

    그 다음 부턴 간격이 전부 0으로 되버리는데 그 이유가 무엇인가요?


    • 편집됨 css58_000 2016년 10월 24일 월요일 오전 1:55 오탈자 수정
    2016년 10월 24일 월요일 오전 1:55

답변

  • 너무 빨라서 그런 것입니다. 처음에 한번 계산할 때 값이 나온 이유는 JIT 컴파일 타임이 들어갔기 때문에 그런 것입니다.

    참고로, Ticks의 시간값이 비록 100-nano까지 보여주지만 그 값의 업데이트가 그 수준으로 되는 것은 아닙니다. 대개의 경우, 약 15ms마다 업데이트가 되기 때문에 그 안에 끝나버리면 값이 같습니다. 이와 관련해 좀 더 자세한 사항은 다음의 글을 참고하세요.

    윈도우 운영체제의 시간 함수 (1) - GetTickCount와 timeGetTime의 차이점
    ; http://www.sysnet.pe.kr/2/0/11063

    참고로, 그런 경우에는 Stopwatch를 이용하는 것이 권장됩니다.


    • 편집됨 SeongTae JeongMVP 2016년 10월 25일 화요일 오전 2:55 보완
    • 답변으로 표시됨 css58_000 2016년 11월 10일 목요일 오후 2:26
    2016년 10월 25일 화요일 오전 2:51