小编men*_*lli的帖子

导管管道执行时间奇怪

我正在测试此递归Haskell函数的性能,该函数重复累加一个无限列表的前100000000个整数(使用Conduit管道),并打印每次执行的经过时间:

import Conduit
import Data.Time.Clock

evaluate_listC 0 = return ()
evaluate_listC i = do
    startTime <- getCurrentTime
    print $ runConduitPure $ yieldMany [1..] .| takeC 100000000 .| sumC
    endTime <- getCurrentTime
    print $ diffUTCTime endTime startTime
    evaluate_listC (i-1)
Run Code Online (Sandbox Code Playgroud)

编译(带有-O标志)并运行代码,并对该函数进行10次迭代,我获得以下执行时间:

38.2066878s
4.3696857s
1.3367605s
0.9950032s
0.9399968s
0.9039936s
0.9079987s
0.9119587s
0.9090151s
0.8749654s
Run Code Online (Sandbox Code Playgroud)

为什么第一次迭代(以及第二次迭代)要花费更多的时间,而随后的迭代却要快得多?

haskell conduit

5
推荐指数
0
解决办法
79
查看次数

标签 统计

conduit ×1

haskell ×1