memory-management - 如何在现有的 Haskell 代码中从 String 转到 Data.ByteString.Lazy?

标签 memory-management haskell profiling

我有一个使用大量字符串的 Haskell 代码,在对其进行分析时,该代码似乎使用了大量内存来存储列表 []。这个问题的一种解决方案是使用 Data.ByteString.Lazy 而不是 String,但是

这样做时我需要关心什么?,

代码的哪一部分必须仔细查看:折叠、映射、...?

谢谢您的回复

最佳答案

OverloadedStrings如果您使用 GHC 并且正在转换包含大量字符串文字的代码,则扩展可能会很方便。只需将以下内容添加到源文件的顶部:

{-# LANGUAGE OverloadedStrings #-}

而且您不必使用 B.pack在代码中的任何字符串文字上。例如,您可以拥有以下内容:
equalsTest :: B.ByteString -> Bool
equalsTest x = x == "Test"

如果没有扩展名,这会导致错误,因为您不能使用 ==ByteString和一个 [Char] .通过扩展,字符串文字的类型为 (IsString a) => a , 和 ByteStringIsString 的一个实例,所以 "Test"这里输入为 ByteString并且没有错误。

关于memory-management - 如何在现有的 Haskell 代码中从 String 转到 Data.ByteString.Lazy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3715247/

相关文章:

c++ - Time Short Functions with cpu time 使用 RTEMS 操作系统

ios - 当传递给另一个 View Controller 时我应该复制一个对象吗

memory-management - Linux 内存过量使用详情

c++ - "Right"解除分配 std::vector 对象的方法

haskell - Haskell的两级类型层次结构

list - 列表中的下一个元素

haskell - 〜的优先级是什么,为什么?

php - Xdebug 和无分析输出

c# - 是否可以在不使用探查器的情况下跟踪 C# 应用程序中的内存使用情况?

mysql - PHP + MySQL 分析器