使用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接口中的内存泄漏,但这是我第一次分析代码,所以我无法确定。有没有人对修复有任何进一步的见解或建议?在循环中调用System.Mem.performGC来尝试清理没有任何效果。
使用HDBC-ODBC还有其他选择吗?如果没有,我可能需要学习F#。