11

在 Haskell 中,我如何“简单地”衡量函数的性能。例如,运行需要多长时间,或者需要多少内存?我知道分析,但是,是否有一种更简单的方法不需要我过多地更改我的代码?

4

2 回答 2

18

测量运行需要多长时间和需要多少内存是两个独立的问题,即:基准测试和分析。Haskell 为这两者提供了一套定义明确的工具。解决这两个问题都不需要您对实际应用程序的代码进行任何更改。

基准测试

这是使用库完成的。Niklas 在评论中提出了该领域的最终赢家,即Criterion。该库设计得非常好,使用起来不难,并且产生了非常详细的数据

工作流程如下:您创建一个包含基准设置的单独模块,编译它并使用选项运行它。要获得可用选项的参考,请使用--help修饰符运行它。

您可以在此处找到设置模块的示例。

剖析

已经有足够多的好材料了,所以我将参考它们:

于 2013-04-02T13:13:09.213 回答
10

有关各个函数之间的性能比较的极其粗略的信息,您可以使用 ghci

Prelude> :set +s
Prelude> last [1..100000000]
100000000
(1.65 secs, 4000685276 bytes)

您需要注意 ghci 不编译代码,因此运行速度比 ghc 慢得多,时间和内存使用数据是近似的,并且绝对没有执行任何优化。

这意味着它只能让您大致了解代码的效率(效率低下),并且不能替代对编译和优化的代码进行适当的基准测试和分析,如Nikita Volkov 的回答中所述。

于 2013-04-02T14:26:15.410 回答