• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Datetime.now.ticks - нафига такая точность, если обновляется он раз в секунду?

  • Автор темы Автор темы EugenOS
  • Дата начала Дата начала
E

EugenOS

Добрый день всем.
Имею такую проблему. Для мониторинга времени работы операций добавил в свою программу опцию измерения времени опрераций:
C++:
#if timelog
		private System.DateTime timerStart;
		String timelog_path;
		private void timeStart() { timerStart = System.DateTime.Now; }
		private void timeInit()
		{			 
			timelog_path = Application.StartupPath + "\\timelog";
			System.IO.File.WriteAllText( timelog_path + "\\timelog.txt", Environment.NewLine );
		}
		private void timeLog(String hdr)
		{
			System.DateTime timerEnd = System.DateTime.Now;
			TimeSpan ts = timerEnd.Subtract(timerStart);
			System.IO.File.AppendAllText( timelog_path + "\\timelog.txt", Environment.NewLine + hdr + " " + ts.Milliseconds + "ms. " + ts.Ticks + " ticks. [" 
				 + timerStart.Millisecond + ":" + timerStart.Ticks + "..."+ timerEnd.Millisecond + ":" + timerEnd.Ticks + "]");
		}
#endif
использую следующим образом (например хочу знать время получения массива сортированных ключей
из SortedDictionary):
C++:
#if timelog
			timeStart();
#endif
			ICollection<UInt64> keys = checks.Keys;
#if timelog
			timeLog( "527:: ICollection<UInt64> keys = checks.Keys;" );
#endif
учитывая, что в данном случае создается и копируется массив, время будет всяко больше 10 наносекунд. Но я имею около 10 таковых операций с результатом времени 0, и одну со временем 1001 с хвостиком миллисекунда. Т.е. на лицо обновление DataTime.Now раз в секунду. Спрашивается - нафига такая высокая точность, если время обновляется так редко?
Может какие опции есть системные?
Пока попробую воспользоваться Environment.Ticks (но тут только миллисекунды) ну или еще может GetTickCount из кернела импортировать...но опять же там, емнип (пойду посмотрю точно), тоже милисекунды...Вопрос что делать????
 
Я соврал, к стати, не 1001 миллисекунд, а 1001 тиков. Но все равно, - не верю что эта операция занимает менее 10 наносекунд. Элементов-то больше тысячи.
Вот кусок "тайм-лога" программы:
Код:
527:: ICollection<UInt64> keys = checks.Keys; 0ms. 0 ticks. [993:635722235399934216...993:635722235399934216]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [125:635722235401254291...125:635722235401254291]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [326:635722235403264406...326:635722235403264406]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [483:635722235404834496...483:635722235404834496]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [626:635722235406264578...626:635722235406264578]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [757:635722235407574653...757:635722235407574653]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [878:635722235408784722...878:635722235408784722]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [30:635722235410304809...30:635722235410304809]
549-557:: if( key >> 16  != baseFileIdx ){...} 0ms. 0 ticks. [154:635722235411544880...154:635722235411544880]
549-557:: if( key >> 16  != baseFileIdx ){...} 1ms. 10001 ticks. [343:635722235413434988...344:635722235413444989]

Все по ноль и вдруг один сразу 1001.
 
Используй Stopwatch. У меня даёт точность до тика.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab