- - PR -
C#のMDIアプリケーションでメモリ使用量が増え続ける
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-21 11:16
C#でMDIのアプリケーションを作っています。
複数の子ウィンドウをCloseメソッドとShowメソッドで切り換えて表示しているのですが、 アプリケーションを長時間動かしていると、徐々に子ウィンドウの表示が遅くなります。 タスクマネージャで見ると、子ウィンドウの表示を切り換えるごとに メモリ使用量が少しずつ増えています。 同じような経験をされた方はいますか? 子ウィンドウの表示が遅くならないような解決策はありましたか? 何かヒントになるようなことでもあればお願いします。 | ||||||||
|
投稿日時: 2005-11-21 11:33
Close をコードから実行しているのは判りましたが、 どのようなタイミングでどこで実行しているのでしょうか? (コードがないので判りません) MDI 子フォームの [x]閉じる ボタンで閉じた場合はどうでしょうか?
メモリ使用量は、いつも信用できる値とは限りませんよね。 たとえば、MDI 親フォームを最小化すれば激減しますよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-21 15:06
じゃんぬねっとさん、返信ありがとうございました。
●子フォームの表示切り換えのタイミングについて 親フォーム内に複数のボタンを配置しており、 各ボタンをクリックしたタイミングで、 対応する子フォームをnewしてShowで表示しています。 他の子フォームが表示されていたら、子フォームはCloseしています。 たとえば、子1を表示中にボタンをクリックして子2を表示する場合には、 ・・・ 子1.Close(); 子1.Dispose(); 子2 = new 子2Form(); 子2.Show(); ・・・ のような順でメソッドを呼んでいます。 子フォームのコントロールボックスは表示しないようにしているため、 [x]閉じるボタンでどうなるかについては、まだ試していません。 ●メモリ使用量について 「いつも信用できる値とは限りません」という件については、 別のサイトでも話題になっていましたね。 タスクマネージャで見ると少しずつ増えるので気になるのですが、 表示が遅くなることとは関係ないかもしれません。 自分と同じような現象を経験された方がいないのであれば、 自分のアプリケーションの作り方に問題があるのか? と思っています。 | ||||||||
|
投稿日時: 2005-11-21 15:13
MDI 子フォームは、親 MDI フォームで一元管理されており、 MDI 子フォーム内に記述されていることは一切ないということで宜しいですか?
親から Close するために、どこかに参照は取っていますよね? どのように管理しているのでしょうか? MDIChildren? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-21 15:59
厳密に書くと、子フォーム内に他の子フォームを表示するボタンを 配置しているフォームもあるのですが、 今回の現象については、親フォームに配置したボタンだけで 表示を切り換えたときにも起きます。
親フォームのMdiChildrenから子フォームを取得してCloseしています。 | ||||||||
|
投稿日時: 2005-11-21 17:55
子ウィンドウあるいは子ウィンドウ内で使用しているコントロールで独自の描画処理を行っていて、そこで何かリソースリークをしているとか。 | ||||||||
|
投稿日時: 2005-11-21 20:53
引き続きデバッグしていたところ、
問題がありそうな箇所を見つけました。 子フォームのLoad内でオブジェクトを生成し、 親フォームが持っているオブジェクトに追加していたのですが、 子フォームをCloseするときに削除していなかったため、 この子フォームを表示するたびにオブジェクトが増えて、 処理が遅くなっていました。 子フォームをCloseするタイミングで、 生成したオブジェクトを削除するように修正したところ、 表示が遅くなる現象が起きなくなりました。 回答くださったお二人には、ありがとうございました。 |
1