Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Геморрой с тиками и наносекундами, StopWatch.Frequency 
:(
    Опции темы
VisualProgrammerNET
Дата 30.10.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Привожу в пример участок кода, время выполнения которого надо замерить
Код

            long freq = System.Diagnostics.Stopwatch.Frequency; //замеряем тик
            long nanosec = (1000L * 1000L * 1000L) / freq; //переводим в наносекунды за тик
            long ftime = 0;
            long stime = DateTime.Now.Ticks; //пуск           
            WaveAlgorithm.AnalyzeField(this.currentfield);
            WaveAlgorithm.CalculatePath();
            WaveAlgorithm.SelectPath(DirectionPriority.RULD);            
            this.SetStatusState("Locked");
            this.locked = true;
            this.Invalidate();
            ftime = (DateTime.Now.Ticks - stime) * nanosec; //всё сделано, смотрим секундомер


В итоге переменная ftime всегда равняется какому-то из нескольких определённых значений, никаких отклонений ваще. Неважно, какие были условия задачи, алгоритм, судя по этой переменной, всегда выполняется либо за период А, либо за период Б, либо за В. Вплоть до наносекунды. Такого ведь не может быть, само собой. В чём тут подвох, никак не пойму?  smile 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Mad
Дата 30.10.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 1
Всего: 19



Цитата(VisualProgrammerNET @  30.10.2007,  17:49 Найти цитируемый пост)
В чём тут подвох, никак не пойму?

Может в том, что самое точное значение, которое тебе возвращаеться системмой, идет с шагом в милисекунду ?
(ну и соответственно, как ты с ним не изголяйся, точней чем мидисекунда не получиш)

Добавлено через 1 минуту и 18 секунд
ниговоря уже о том, что nanosec неплохобы хотябы float сделать


--------------------
user posted image
PM MAIL   Вверх
Experimenter
Дата 30.10.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 8
Всего: 17



Mad, а вообще не тактовой ли частотой процессора точность определяется? а также моментом времени, которое процессор твоему приложению выделяет на обработку (125 мс)?


Это сообщение отредактировал(а) Experimenter - 30.10.2007, 20:40


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 30.10.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Короче видимо придётся отказаться от этой затеи... Подскажите плиз толковый измеритель времени выполнения кода. 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
tol05
Дата 30.10.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(VisualProgrammerNET @  30.10.2007,  21:42 Найти цитируемый пост)
толковый измеритель времени выполнения кода

ИМХО то, что тебе нужно - здесь  smile 

А вообще, я когда-то пробовал это




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
coSSinuSS
Дата 16.11.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Цитата(VisualProgrammerNET @ 30.10.2007,  18:49)
Привожу в пример участок кода, время выполнения которого надо замерить
Код

            long freq = System.Diagnostics.Stopwatch.Frequency; //замеряем тик
            long nanosec = (1000L * 1000L * 1000L) / freq; //переводим в наносекунды за тик
            long ftime = 0;
            long stime = DateTime.Now.Ticks; //пуск           
            WaveAlgorithm.AnalyzeField(this.currentfield);
            WaveAlgorithm.CalculatePath();
            WaveAlgorithm.SelectPath(DirectionPriority.RULD);            
            this.SetStatusState("Locked");
            this.locked = true;
            this.Invalidate();
            ftime = (DateTime.Now.Ticks - stime) * nanosec; //всё сделано, смотрим секундомер


В итоге переменная ftime всегда равняется какому-то из нескольких определённых значений, никаких отклонений ваще. Неважно, какие были условия задачи, алгоритм, судя по этой переменной, всегда выполняется либо за период А, либо за период Б, либо за В. Вплоть до наносекунды. Такого ведь не может быть, само собой. В чём тут подвох, никак не пойму?  smile

ИМХО борька, этот татализатор выиграл я, ибо у меня все работает на ура и считает хоть с точностью и не до наносекунды, но милисекунды считает прально  smile 
PM MAIL WWW   Вверх
Bogdan1024
Дата 16.11.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Цитата
Может в том, что самое точное значение, которое тебе возвращаеться системмой, идет с шагом в милисекунду ?
(ну и соответственно, как ты с ним не изголяйся, точней чем мидисекунда не получиш)

Определять время вполь до микросекунд можно с помощью ассемблера   smile 

Это сообщение отредактировал(а) Bogdan1024 - 16.11.2007, 12:05


--------------------
user posted image
PM MAIL   Вверх
archeg
Дата 16.11.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Вот у меня такой вопрос по теме. Винда ведь делит процессорное время для много-много потоков. И для того чтобы один процессор обработал много потоков винда делит каждый поток на (забыл как называется) - куски потоков. 

Например этот код:
Код

            //-------------------- Тут процессор начал обрабатывать поток-----------------------------------
            long freq = System.Diagnostics.Stopwatch.Frequency; //замеряем тик
            long nanosec = (1000L * 1000L * 1000L) / freq; //переводим в наносекунды за тик
            long ftime = 0;
            long stime = DateTime.Now.Ticks; //пуск           
            WaveAlgorithm.AnalyzeField(this.currentfield);
            // ------------------- К примеру тут он поток приостановил и обработал десяток других потоков
            //-------------------- Потом снова возобновил работу потока------------------------------------------
            WaveAlgorithm.CalculatePath();
            WaveAlgorithm.SelectPath(DirectionPriority.RULD);            
            this.SetStatusState("Locked");
            this.locked = true;
            this.Invalidate();
            //-------------------- Ну и мы посчитали сумарное время-------------------------------------------------
            ftime = (DateTime.Now.Ticks - stime) * nanosec; //всё сделано, смотрим секундомер            

Так как можно говорить про точный замер времени, если в это время мы даже не уверены сколько потоков было выполнено?


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.