1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе ".NET - программирование", создана пользователем EugenOS, 11 июл 2015.

  1. EugenOS

    EugenOS Active Member

    Репутация:
    0
    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Добрый день всем.
    Имею такую проблему. Для мониторинга времени работы операций добавил в свою программу опцию измерения времени опрераций:
    Код:
    #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):
    Код:
    #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 из кернела импортировать...но опять же там, емнип (пойду посмотрю точно), тоже милисекунды...Вопрос что делать????
     
  2. EugenOS

    EugenOS Active Member

    Репутация:
    0
    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Я соврал, к стати, не 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.
     
  3. a0z

    a0z Well-Known Member

    Репутация:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    108
    Симпатии:
    0
    Используй Stopwatch. У меня даёт точность до тика.
     
Загрузка...
Похожие Темы - Datetime now ticks
  1. Kozolick
    Ответов:
    7
    Просмотров:
    763
  2. garrick
    Ответов:
    12
    Просмотров:
    2.940
  3. vvlad
    Ответов:
    9
    Просмотров:
    2.432
  4. dimat
    Ответов:
    12
    Просмотров:
    4.286
  5. wowa
    Ответов:
    11
    Просмотров:
    4.524

Поделиться этой страницей