5 ответов:
простые вещи это просто
:set +sнаghci, а затем вы можете увидеть время выполнения всего, что вы запускаете, а также использование памяти.
на
criterionпакета было сделано специально, чтобы сделать это хорошо.
смотрите, если http://hackage.haskell.org/package/timeit подходит для ваших нужд.
тест времени выполнения функции включен в критерий.Измерение
например, если я хочу, чтобы захватить время
someIOFunction :: IO ()import Criterion.Measurement main = secs <$> time_ someIOFunction >>= print
критерий-самый сложный метод, хотя мне было трудно начать, и он, похоже, нацелен на бенчмаркинг программ. Я хотел вычислить время выполнения и использовать эти данные в своей программе, и это, похоже, не отвечает этой потребности, по крайней мере, это не сразу видно.
TimeIt очень прост и делает то, что я хотел, за исключением того, что он не обрабатывает чистые функции хорошо. Время возвращается на чистая функция-это распределение времени подумать (насколько мне известно) и даже с помощью seq может быть трудно получить то, что вы хотите.
то, что работает для меня, основано на TimeIt.
import System.TimeIt timeItTPure :: (a -> ()) -> a -> IO (Double,a) timeItTPure p a = timeItT $ p a `seq` return ain timeItTPure p a, p-функция, ответственная за оценку результата чистого вычисления, a, так глубоко, как это необходимо для получения хорошего времени оценки. Может быть, это простое совпадение шаблонов, может быть, это подсчет длины списка, может быть, его seq каждый элемент в списке, может быть, его deepseq и т. д.
использование seq является сложным. Отмечать, приведенная ниже функция не работает должным образом. Хаскелл-загадочная вещь.
badTimeItTPure a = timeItT . return $ seq (p a) a
Comments