先日、リソース プールと HDBC をまとめてみましたが、クエリごとにメモリが増え続けていることに気付きました。次に、できるだけ少ない関数を使用して簡単なテスト コードを作成し、次のようにしました。
data SQL = SQL (Pool Connection)
check :: SQL -> IO ()
check (SQL pool) = do res <- query' pool "show status like 'Threads_conn%'" []
threadDelay 100000
check (SQL pool)
コード全体: http://upaste.me/40f2229cef7157f
チェック関数を再帰するたびに、プログラムはより多くのメモリを使用します。結果は新しい再帰呼び出しでガベージコレクションされるべきではありませんか、それとも「必要な」場合に備えてプログラムがその関数を終了するまでメモリに残りますか?