C ++ Асимптотическое профилирование - PullRequest
1 голос
/ 25 мая 2010

У меня проблема с производительностью, из-за которой я подозреваю, что одна стандартная функция библиотеки C занимает слишком много времени и приводит к тому, что вся моя система (набор процессов) в основном «сбивается». Конечно же, если я закомментирую вызов библиотечной функции, сбой исчезнет. Это побудило меня исследовать, какие стандартные методы существуют для доказательства такого рода вещей? Какова была бы наилучшая практика для тестирования функции, чтобы увидеть, вызывает ли она зависание всей системы на секунду (вызывая мгновенное голодание других процессов)?

Я хотел бы, по крайней мере, окончательно сопоставить вызываемую функцию и видимое замораживание.

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Я пытаюсь выяснить, что вы подразумеваете под "икотой". Я представляю, что ваша программа делает что-то вроде этого:

while (...){
  // 1. do some computing and/or file I/O
  // 2. print something to the console or move something on the screen
}

и обычно печатный или графический вывод гудит субъективно непрерывно, но иногда кажется, что он зависает, в то время как вычислительная часть занимает больше времени.

Ты это имел ввиду?

Если это так, я подозреваю, что в рабочем состоянии он всегда находится на шаге 2, но в состоянии сбоя он тратит время на шаге 1.

Я бы прокомментировал шаг 2, чтобы он провел почти все свое время в состоянии сбоя, а затем просто приостановил его под отладчиком , чтобы посмотреть, что он делает. Эта техника точно скажет вам, в чем проблема, приложив совсем немного усилий.

0 голосов
/ 25 мая 2010

Лучший способ определить это - использовать инструмент профилирования для получения информации о том, сколько времени тратится на каждый вызов функции.

Сбой при настройке функции, которая резервирует блок памяти.Затем в своем коде в разных точках запишите строку в память, включая текущее время.(Это позволяет избежать задержек, связанных с записью на дисплей).После запуска кода извлеките память и проанализируйте ее, чтобы определить, сколько времени занимает часть кода.

...