在Haskell中,我怎样才能“简单地”测量函数性能。例如,运行需要多长时间,或者需要多少内存?我知道分析,但是,是否有一种更简单的方法,不需要我太多地改变我的代码?
答案 0 :(得分:18)
测量运行所需的时间以及需要多少内存是两个独立的问题,即:基准测试和分析。 Haskell为两者提供了一套定义明确的工具。解决这两个问题都需要您对实际应用程序的代码进行任何更改。
这是使用库完成的。在该领域有一个最终的赢家,这是Niklas在评论中提出的,Criterion。该库设计得非常好,不难使用并生成very detailed data。
工作流程如下:您创建一个单独的模块,其中包含基准测试的设置,编译并使用选项运行它。要获得有关可用选项的参考,请使用--help
修饰符运行它。
您可以找到设置模块here的示例。
已经有足够的好材料了,所以我只想参考它们:
答案 1 :(得分:10)
有关各个函数相互比较的非常粗略的信息,您可以使用ghci
Prelude> :set +s
Prelude> last [1..100000000]
100000000
(1.65 secs, 4000685276 bytes)
你需要知道ghci没有编译代码,所以运行比ghc慢,时间和内存使用数据是近似的,并且绝对没有执行优化。
这意味着它只能让您非常粗略地了解代码的有效性,并且无法替代正确的编译和优化代码的基准测试和分析,详见Nikita Volkov's answer。