Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сколько работало времени, и использовало памяти приложение? 
:(
    Опции темы
northener
Дата 18.10.2011, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bems @  18.10.2011,  02:20 Найти цитируемый пост)
Видно что результат прямопропорционален задержке в Sleep. Известно что эта функция делает вызвавший тред не планируемым как минимум на указанный интервал (ну есть неточность связанная с частотой таймера, но это в данном случае не важно). Большинство этого времени тред не выполняется. 
Представь что там не Sleep, а код, который ты пытаешься так профайлить. В середине этого кода, на на том же логическом процессоре начинает выполняться чужой поток (тз-за конца кванта времени отпущенного твоему потоку, или это высокоприоритетный поток и он вытесняет твой на этом основании). 
И QueryPerformanceCounter как ни в чем не бывало вернет тебе время, включающее выполнение чужого потока.


Наверно мы говорим о разном.
Ты уж тогда приведи пример использования функций GetProcessTimes/GetThreadTimes в тех же условиях. А я уж сравню результаты.

P.S. Но "логгирование" тут уж никак ни при чём.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 18.10.2011, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(northener @  18.10.2011,  02:39 Найти цитируемый пост)
Ты уж тогда приведи пример использования функций GetProcessTimes/GetThreadTimes в тех же условиях. А я уж сравню результаты.

Сейчас


Цитата(northener @  18.10.2011,  02:39 Найти цитируемый пост)
Но "логгирование" тут уж никак ни при чём. 

А где о нем шла речь?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 18.10.2011, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bems @  18.10.2011,  02:45 Найти цитируемый пост)
А где о нем шла речь?

В "некромантском " посте от 28.7.2011, 16:22
на который вы "поспешили ответить" 17.10.2011, 22:45 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 18.10.2011, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Как-то так
Код

program Project3;
{$APPTYPE CONSOLE}
uses
  windows, sysutils;

  procedure LoopDelay(ms: DWORD);
  var
    tc: DWORD;
  begin
    tc := GetTickCount;
    repeat until GetTickCount - tc >= ms;
  end;

  procedure WriteInterval(ms: DWORD; UseSleep: Boolean);
  var
    c, e: FileTime;
    kt1, kt2, ut1, ut2: ULARGE_INTEGER;
  begin
    if not GetThreadTimes(GetCurrentThread, c, e, FileTime(kt1), FileTime(ut1))
       then RaiseLastOsError;

    if UseSleep then Sleep(ms) else LoopDelay(ms);

    if not GetThreadTimes(GetCurrentThread, c, e, FileTime(kt2), FileTime(ut2))
       then RaiseLastOsError;
    writeln('User: ', ut2.QuadPart - ut1.QuadPart, '     Kernel: ', kt2.QuadPart - kt1.QuadPart);
  end;

begin
  WriteInterval(500, True);
  WriteInterval(500, False);
  writeln;

  WriteInterval(1000, True);
  WriteInterval(1000, False);
  writeln;

  WriteInterval(2000, True);
  WriteInterval(2000, False);
  writeln;
  
  WriteInterval(5000, True);
  WriteInterval(5000, False);
  readln
end.

результат:

Цитата
User: 0     Kernel: 0
User: 5148033     Kernel: 0

User: 0     Kernel: 0
User: 9048058     Kernel: 0

User: 0     Kernel: 0
User: 19188123     Kernel: 0

User: 0     Kernel: 0
User: 45240290     Kernel: 0

видим что в случае Sleep никакого выполнения не фиксируется, а в случае задержки циклом - фиксируется время, грубо пропорциональное времени задержки. То что грубо вина не только GetThreadTimes а еще и GetTickCount который тут постольку поскольку.

Добавлено через 1 минуту и 42 секунды
Цитата(northener @  18.10.2011,  02:52 Найти цитируемый пост)
на который вы "поспешили ответить" 17.10.2011, 22:45  
даже не представляю как я тут оказался smile



--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 18.10.2011, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bems @  18.10.2011,  03:05 Найти цитируемый пост)
То что грубо вина не только GetThreadTimes а еще и GetTickCount который тут постольку поскольку.

А я ведь не об этом. То что GetTickCount имеет дискретность ~16мс это не секрет.
И прямая пропорциональность тоже не волшебство.
Я лишь хотел спросить о том, поддерживают ли функции GetProcessTimes/GetThreadTimes обещанную точность в 100 наносекунд?
Дело в том, что на предыдущей своей работе столкнулся с тем, что внешнее (и ну очень дорогое железо) никак не хочет принимать команды чаще чем через 16 мс. Но это бы ещё ничего. Но примерно раз через пять, оно принимало и выполняло команды с задержкой в 200-300 мс.
Только логгирование с помощью функции QueryPerformanceCounter мне помогло доказать начальству, что то железо, которое они купили за бешеные деньги ни как им не годится. 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 18.10.2011, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(northener @  18.10.2011,  00:53 Найти цитируемый пост)
Цитата(bems @  18.10.2011,  00:22 Найти цитируемый пост)
А QueryPerformanceCounter, как и Now, как и GetTickCount бессильны в случаях когда в середине измеряемого интервала активизируетсмя какой-нить другой тред и начинает делать что-то тяжелое 


Обоснуй! Про Now и GetTickCount я не спрашиваю. Только про QueryPerformanceCounter. 

Вот тут ты просил показать что QueryPerformanceCounter не выдерживает условия конкуренции тредов, а GetThreadTimes выдерживает. Я показал.
А твой пример со сторонним железом тут вообще не при чем, потому что не идет речь о том сколько же времени выполнялся код твоего процесса/потока, а только когда отреагировало железо.
Тут GetThreadTimes не поможет, но недостаток QueryPerformanceCounter остаётся: если твой тред вытеснят, то ты поставишь отметку времени завершения команды позже чем реально ответило железо.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 19.10.2011, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bems @  18.10.2011,  03:51 Найти цитируемый пост)
А твой пример со сторонним железом тут вообще не при чем, потому что не идет речь о том сколько же времени выполнялся код твоего процесса/потока, а только когда отреагировало железо.

Ну в данном случае речь как раз шла о времени выполнения моего кода вкупе со временем выполнения функций/процедур, которые непосредственно работают с тем железом. А "те функции/процедуры" мне были даны в некоей/неких dll.

P.S. Собственно к железу у меня претензий не было.
Дали бы мне "непосредственный" доступ к нему, я скорее всего смог бы с ним справиться так как нужно было заказчику. 



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 19.10.2011, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Ну собственно выполнение кода замерило бы, да.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Korod
Дата 24.10.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Говорить о точности измерения временных интервалов в Винде - смех! Что  GetTick..., что Query..., что в стену - что об стену..
PM MAIL   Вверх
CROTishka
Дата 25.10.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Ещё вопрос, а как не задать память приложению, а узнать, сколько точно времени оно работало и сколько динамической памяти заняло. И если можно пример???

а что, профилировщики ещё не посоветовали?
лично я с делфи AQtime использую.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




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


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

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