4

先日、リソース プールと 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

チェック関数を再帰するたびに、プログラムはより多くのメモリを使用します。結果は新しい再帰呼び出しでガベージコレクションされるべきではありませんか、それとも「必要な」場合に備えてプログラムがその関数を終了するまでメモリに残りますか?

4

1 に答える 1

1

フォローアップが遅れましたが、使用していたプールのバージョンによっては、プールの実装自体にバグがあった可能性があります: https://github.com/bos/pool/pull/4

于 2013-01-31T03:09:03.810 に答える