Codec.Binary.Base64.encode速度很慢

 黄勋佩淑青宜合 发布于 2023-02-06 11:40

我正在使用http://hackage.haskell.org/package/dataenc-0.14.0.5/docs/Codec-Binary-Base64.html#v:encode,我发现这非常慢:

import qualified Codec.Binary.Base64 as C
import System.Environment

main = do
    [arg] <- getArgs
    print $ length $ C.encode $ replicate (read arg) 80

参数10 ^ 5的运行时间:0.5 s,2 * 10 ^ 5:3.4 s,3 * 10 ^ 5:9.4 s。但是这样的事情应该线性运行吗?

当我寻找问题的原因时-是否有解决方法(其他库)?

PS:这行代码https://github.com/magthe/dataenc/blob/master/src/Codec/Binary/Base64.hs#L77看起来非常有问题(即二次):

doEnc acc (o1:o2:o3:os) = doEnc (acc ++ enc3 [o1, o2, o3]) os
doEnc acc os = EPart acc (eI os)

果然,使用简单的代码

encode ws = case ws of
    [] -> [] 
    o1:ws2 -> case ws2 of
        [] -> take 2 (enc3 [o1,0,0]) ++ "=="
        o2:ws3 -> case ws3 of
            [] -> take 3 (enc3 [o1,o2,0]) ++ "="
            o3:ws4 -> enc3 [o1,o2,o3] ++ encode ws4

已经大大改善了(例如,以4 s编码的10 ^ 8字节)

PPS:根据以下建议,该程序

import qualified Data.ByteString as B
import qualified Data.ByteString.Base64 as B64
import System.Environment

main = do
    [arg] <- getArgs
    print $ B.length $ B64.encode $ B.replicate (read arg) 80

在0.4秒内编码10 ^ 8个字节。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有