Я начал опробовать вещи с 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
не является функцией.