2009-07-01 3 views
2

Как профилировать мои функции с помощью DrScheme?Как мне профилировать в DrScheme?

(require profile) 
(define (factorial n) 
    (cond 
    ((= n 1) 1) 
    (else (* n (factorial (- n 1)))))) 

(profile factorial) 

Приведенный выше код возвращает

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

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

Я пробовал: - (профиль (факториал 100))
- (профиль факториал) (факториал 100)
Но это дает мне тот же результат. Что я делаю неправильно?

ответ

1

Я не знаком с модулем profile в PLT-схеме, но, возможно, вам нужно фактически вызвать функцию?

(profile (factorial 1000)) 
+0

Я тоже это пробовал, но он не работал :( – unj2

+1

Ответ Greg правильный в случае PLT - 'profile' выполнит подвыражение при выборке стека при его запуске. Обратите внимание, что ваша функция будет работать очень быстро для небольших входов и поэтому не будет длиться достаточно долго, чтобы иметь какой-либо образец с ним - вам нужно использовать большие значения для этого. –

+0

Да, вы были верны. Но почему (trace factorial) (time (factorial 50)) дайте мне время процессора : 484 в режиме реального времени: 523 gc time: 0 but (profile (factorial 50)) не имеет никакого эффекта? – unj2

1

Вы пробовали выкрутив N в (профиль (факториал N)), пока существует заметная пауза?

(factorial 100) - это то, что современный компьютер должен иметь возможность делать в < 1ms.

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

Смежные вопросы