gpt4 book ai didi

haskell - 在 Haskell 中读取大型二进制文件的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 12:02:48 27 4
gpt4 key购买 nike

我想处理一个太大而无法读入内存的二进制文件。目前我使用ByteString.Lazy.readFile流式传输字节。我认为使用 streaming 是个好主意包以使我的程序更快。但是,documentation对于 readFile说:

readFile :: FilePath -> (Stream (Of String) IO () -> IO a) -> IO a

Read the lines of a file, using a function of the type: 'Stream (Of String) IO () -> IO a' to turn the stream into a value of type 'IO a'.



所以 streaming包只读取 ASCII 文本文件?我可以使用这个包将二进制文件读取为字节吗?

最佳答案

为了详细说明@Cubic 的评论,虽然人们普遍认为应该在生产代码中避免惰性 I/O 并用流式方法代替,但这是 不是 直接关系到性能。如果您正在编写一个程序来一次性处理一个大文件,只要您现在有一个运行良好的惰性 I/O 版本,那么可能没有好的性能理由将其转换为流式包。

事实上,流式传输更有可能增加一些开销,因此我怀疑在大多数情况下,一个优化良好的惰性 I/O 解决方案会胜过一个优化良好的流式传输解决方案。

避免延迟 I/O 的主要原因是 previously discussed on SO .简而言之,惰性 I/O 使得难以一致地管理资源(例如,文件句柄和网络套接字),使得难以推理空间使用情况(例如,一个小的程序更改可能导致您的内存使用量爆炸式增长),并且如果有问题的 I/O 的时间和顺序很重要(如果您只是读入一组文件和/或写出另一组文件,通常不是问题),则有时是“不安全的”。

用于读取和/或写入大文件的短期实用程序可能是采用惰性 I/O 风格编写的不错选择。只要它们在运行时没有任何明显的空间泄漏,它们可能就可以了。

关于haskell - 在 Haskell 中读取大型二进制文件的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55804770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com