提案 #1417
Shibafu Midorino さんがほぼ5年前に更新
h2. TL;DR オンメモリキャッシュを時限キャッシュからWeakrefに変えることで、実用上困らない範囲でメモリの節約ができるかも。 h2. 現在の問題 Photo ModelのGdkPixbuxCacheが、過剰にアイコンキャッシュを持つことが度々あります。 ModelのGdkPixbuxCacheが、アイコンキャッシュを持つことが度々あります。 短時間の起動セッションであればあまり問題にはなりませんが、長時間起動していると不要である可能性のあるPixbufが蓄積され続けることとなります。 また、現在のキャッシュ戦略ではごく短時間に、または複数のTLで複数回出現したユーザーのアイコンは一気に生存期間が長くなります。 これは必要以上に生存するオブジェクトを増やしているおそれがあります。 もっとも、アイコン程度であればあまり大きなPixbufではないので、十分なメモリを持つ環境では無視できるとも言えます。 h2. 変更案 GdkPixbufCacheを現在の時限キャッシュから、Weakrefを用いて現在使用されているもののみ生かすようにする案が、mikutter Slackにて出ています。 頻繁にTLに出現するユーザーにフォーカスを当てたキャッシュ戦略であり、不要になったPixbufはすぐに捨てられるようになります。 また、ディスクキャッシュをもっと活用するように改良する案も上がっていて、これらを組み合わせることで ネットワークに負荷をかけすぎることもなく、メモリの節約が期待できます。 (これは別チケットで良さそうです) h2. 添付資料 常用環境においてキャッシュ戦略を変えることでメモリ消費がどのように変化するかを調査するため、以下の条件を基準として設定した。 * mikutter 4.0.0 (commit:27493b3d) * Pixbufの生成元を特定するため、Pixbufにタグ情報を追加できるようにするパッチを適用 * 私の普段使いのプロファイル (プラグイン約60個) ** moguno/mikutter-subparts-image ** toshia/image-file-cache-ng ** shibafu528/pixbuf_profiler (今回のPixbuf数のプロファイル記録用で作成したプラグイン) そして、それぞれ以下の追加条件でプロファイルをとった。 # vanilla = 上記環境そのままで実行 # nocache = 上記環境のgtk_photo_pixbuf.rbをカスタマイズし、一切オンメモリキャッシュを使わないようにした状態で実行 現在の実装はキャッシュとしては機能を果たしているが、ほとんど減ることがなく増加し続けていることが分かる。