読者です 読者をやめる 読者になる 読者になる

WPFでニコニコメソッド メモリリーク

先日作ったWPFでニコニコメソッドができるツール(d:id:ZOETROPE:20070909)を使って、どれくらいコメントつけられるか遊んでいたのですが・・・

タスクマネージャを開くと、メモリの使用量がエラいことに!(1000個くらいコメントつけると1GBくらいメモリを消費する模様。)

アニメーションするたびに、TextBlockをCanvasに追加して、それを解放していないのが問題だろうとは思っていたので、下記のようにアニメーションの終了イベント時に、CanvasからTextBlockを削除する処理を追加してみました。

                // テキストのアニメーション
                textBlock.RenderTransform = transform;
                Duration duration = new Duration(TimeSpan.FromMilliseconds(5000));
                DoubleAnimation animationX = new DoubleAnimation(-1 * message.Length * fontsize, duration);
                animationX.Completed += new EventHandler(animationX_Completed);
                animationX.Name = textBlock.Name;
                transform.BeginAnimation(TranslateTransform.XProperty, animationX);
            }
        }

        void animationX_Completed(object sender, EventArgs e)
        {
            AnimationClock clock = (AnimationClock)sender;
            lock (this.canvas.Children)
            {
                for (int i = 0; i < this.canvas.Children.Count; i++ )
                {
                    if (((TextBlock)this.canvas.Children[i]).Name.Equals(clock.Timeline.Name))
                    {
                        this.canvas.Children.RemoveAt(i);
                        break;
                    }
                }
            }
        }

この処理を入れて、タスクマネージャでメモリの使用量を確認したところ、ちゃんとメモリが解放されるようになりました。

と思ってたんだけど、d:id:NyaRuRu:20051022で紹介されているように、Process Explorerでメモリの消費量を見てみたところ、Working Setの使用量は減ってるんだけど、Virtual Sizeは減っていないみたい。

この辺はあまり詳しくないんだよなぁ。インサイド Microsoft Windows買いにいくか・・・

インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)

インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)