Haskell HDBC-ODBC内存泄漏?

Byr*_*lis 5 memory haskell 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Byr*_*lis 1

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

更多详细信息请参阅此错误报告