使用Haskell HDBC-ODBC库连接到Microsoft SQL Server时,我遇到了严重的内存泄漏问题。
运行堆分析器时,我的内存使用保持不变,但Windows报告内存使用增加到接近100MB。
是否有其他可替代的HDBC-ODBC方案?如果没有,我可能需要学习F#。
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
运行堆分析器时,我的内存使用保持不变,但Windows报告内存使用增加到接近100MB。
http://i.stack.imgur.com/YkUTW.png
对我来说,这似乎是ODBC驱动程序的Foreign Function接口中出现了内存泄漏问题,但这是我第一次对代码进行剖析,所以我不能确定。是否有人可以提供更深入的见解或修复建议?在循环中调用System.Mem.performGC以尝试清理没有效果。是否有其他可替代的HDBC-ODBC方案?如果没有,我可能需要学习F#。
commit c
会有什么不同吗? - duplode