2012-04-26 47 views
19

我有一個相對緩慢的過程(適當命名的慢),我想這樣做獲取定時在GHCI

time $ slow [1,2,3,4,5] 
在控制檯(REPL)

得到的時間,而不必編譯程序然後運行時間。

可以這樣做嗎?

+3

在ghci? ':set + s'獲取所有評估表達式的計時和分配統計信息。如果你願意,你可以使用'System.CPUTime.getCPUTime'自己寫一個'time'。 – 2012-04-26 22:23:32

+1

請注意,交互式程序不會爲您提供有關編譯性能的準確信息。 – rotskoff 2012-04-26 23:02:33

+5

你可能會喜歡'runhaskell foo.hs'和它更誠實的夥伴'ghc foo.hs -O2 && time。/ foo'。 – 2012-04-27 00:27:50

回答

35

如果您在GHCi中輸入:set +s,則計算和記憶信息將在評估每個表達式後打印。

實施例:

Prelude> :set +s 
Prelude> sum [1..2^20] 
549756338176 
it :: (Num a, Enum a) => a 
(0.34 secs, 169,197,008 bytes) 

注意,這將是作爲在解釋計算的表達式的定時,沒有優化,所以這並不一定是東西花費多長時間的精確測量,或者甚至在實際編譯的代碼中,相同代碼的兩個版本中的哪一個會更快。爲此,請查看criterion基準庫。