当使用 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/