Haskell HDBC-ODBC 内存泄漏?

标签 haskell memory memory-leaks

当使用 Haskell HDBC-ODBC 库连接到 Microsoft SQL Server 时,我遇到了严重的内存泄漏。

import           Database.HDBC        
import qualified Database.HDBC.ODBC   as ODBC
import           Control.Monad

-- | Main application.
main :: IO ()
main = dbTest

dbTest :: IO ()
dbTest = do
    let connStr = "DSN=TESTDB;Uid=sa;Pwd=password"
    conn <- ODBC.connectODBC connStr
    replicateM_ 20000 (loop conn)
    disconnect conn
  where
    loop c = do
        result <- getTables c
        commit c
        putStrLn $ show result

运行堆分析器给了我恒定的内存使用,但 Window 报告内存增加到几乎 100MB 的使用量。

http://i.stack.imgur.com/YkUTW.png

对我来说,这似乎是 ODBC 驱动程序的 Foreign Function 接口(interface)中的内存泄漏,但这是我第一次分析代码,所以我不能确定。有没有人对修复有任何进一步的见解或建议?在循环中调用 System.Mem.performGC 尝试清理没有效果。

有没有使用 HDBC-ODBC 的替代方法?如果没有,我可能需要学习 F#。

最佳答案

问题出在 hdbc-odbc 库中。 Git repo 提供了一个新版本 v2.5,但 hdbc 库也需要修补才能工作。

更多详情请访问 this bug report .

关于Haskell HDBC-ODBC 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32408862/

相关文章:

algorithm - 用于排除埃拉托斯特尼筛法数字的 Haskell 代码未按预期工作

java - Java 中的哈希表内存使用情况

c# - 不会被释放的静态变量

haskell - 我什么时候应该在 Haskell 中使用记录语法进行数据声明?

exception - 异步异常的嵌套屏蔽

使用 parsec 解析 sum 数据类型

c - 如何返回一个指向完整数组的指针,也就是 int(*)[] 到主函数

C内存免混淆

c - 如何使用 HDF5 C API 从内存缓冲区打开 hdf5 文件

c++ - 我的软件在大量分配后仍在使用一些内存