Khi sử dụng thư viện Haskell HDBC-ODBC để kết nối với Microsoft SQL Server, tôi đang gặp sự cố rò rỉ bộ nhớ kém.Haskell HDBC-ODBC Rò rỉ bộ nhớ?
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
Chạy trình tạo heap giúp tôi sử dụng bộ nhớ liên tục nhưng Window báo cáo tăng đến gần 100MB sử dụng.
http://i.stack.imgur.com/YkUTW.png
Đối với tôi điều này dường như rò rỉ bộ nhớ là trong giao diện chức năng nước ngoài của các trình điều khiển ODBC, nhưng đây là lần đầu tiên tôi profiling mã vì vậy tôi không thể chắc chắn. Có ai có bất kỳ cái nhìn sâu sắc hơn hoặc gợi ý cho một sửa chữa? Gọi System.Mem.performGC trong vòng lặp để thử và làm sạch không có hiệu lực.
Có cách nào khác để sử dụng HDBC-ODBC không? Nếu không, tôi có thể cần phải học F #.
Đoán tùy ý: việc xóa 'commit c' có tạo sự khác biệt không? – duplode
Không, cam kết c không tạo nên sự khác biệt nào cả. Cũng sử dụng một quickQuery 'thay vì getTables gây ra sự rò rỉ bộ nhớ tương tự. –