5
当使用Haskell HDBC-ODBC库连接到Microsoft SQL Server时,我遇到了内存泄漏问题。Haskell HDBC-ODBC内存泄漏?
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
运行堆分析器给我定的内存使用情况,但窗口报告内存增加到用量的近100MB。
http://i.stack.imgur.com/YkUTW.png
对我来说,这似乎是内存泄漏的ODBC驱动程序的外部函数接口,但是这是我第一次配置代码,所以我不能肯定。有没有人有任何进一步的见解或建议的修复?在循环中调用System.Mem.performGC以尝试清理不起作用。
有使用HDBC-ODBC的其他选择吗?如果没有,我可能需要学习F#。
任意猜测:是否删除了'提交C'有所作为? – duplode
不,提交c根本没有任何区别。同样使用quickQuery而不是getTables会导致相同的内存泄漏。 –