Профилирование на Windows - PullRequest
0 голосов
/ 28 октября 2018

Я начал опробовать вещи с Racket несколько дней назад, и теперь я застрял с профилировщиком.

Функция, которую я хочу профилировать, называется my-fn.

Перваяя попытался включить (require profile), затем вызвать (profile-thunk (thunk (my-fn arg1))).

Когда я нажимаю кнопку запуска в DrRacket, он показывает

Profiling results
-----------------
  Total cpu time observed: 0ms (out of 2ms)
  Number of samples taken: 0 (once every 0ms)

====================================
                        Caller
Idx  Total    Self    Name+srcLocal%
     ms(pct)  ms(pct)   Callee
====================================

, а затем выводит возвращаемое значение `my-fn`.

Затем я попытался замедлить свою функцию, добавив ей больше аргументов в аргументах, и добавил опцию `#: repeat` в профилировщик.

(profile-thunk (thunk (my-fn arg1)) #:repeat 5000)

Результат теперь:

Profiling results
-----------------
  Total cpu time observed: 29488ms (out of 31641ms)
  Number of samples taken: 1687 (once every 17ms)

====================================
                        Caller
Idx  Total    Self    Name+srcLocal%
     ms(pct)  ms(pct)   Callee
====================================

Что, похоже, сделало что-то хорошее, но я все еще не вижу результатов.

Затем я попытался использовать командную строку (после добавления raco к %PATH%)

raco profile .\test.rkt

но я все равно не получаю ничего хорошего:

Profiling results
-----------------
  Total cpu time observed: 234ms (out of 281ms)
  Number of samples taken: 4 (once every 59ms)

====================================
                        Caller
Idx  Total    Self    Name+srcLocal%
     ms(pct)  ms(pct)   Callee
====================================

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

Sidenote, возможно ли получить результаты профилировщика ПОСЛЕ возвращаемого значения функции в DrRa?cket?У меня длинный список чисел, мне нужно прокрутить вверх, чтобы увидеть (пустой) результат профилировщика.(Это не происходит в командной строке, хотя это не очень важно)

Спасибо

PS Я также пытался изменить рендерер с помощью (require profile/render-text)

и then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer render)

или then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer text:render)

или then (profile-thunk (thunk (my-fn arg1)) #:repeat 5000 #:renderer #'render)

Но я получаю сообщения об ошибках о том, что renderer не является функцией.

1 Ответ

0 голосов
/ 30 октября 2018

Не совсем то, на что я надеялся, но я нашел исправление в списке рассылки .

Чтобы включить профилирование в DrRacket:

  • Goна язык |Выберите язык
  • Нажмите Показать подробности
  • В правом верхнем углу выберите «Отладка и профилирование».(настройка по умолчанию, кажется, только отладка)

Затем запустите некоторый код в консоли или с помощью кнопки «Выполнить», а затем:

  • Перейти к просмотру |Показать профиль

и внизу экрана отобразится информация профиля.Насколько я вижу, он не очень хорошо обрабатывает поток (печатает <<unknown>>37:28 для строки команды присоединения потока touch), но всегда лучше, чтобы не было никакого профилировщика.

Я все ещеНе удалось решить, почему я не могу заставить работать ни функцию profile-thunk, ни макрос profile, ни команду profile raco, но это может быть связано с windows или моей установкой?

...