■67972 / inTopicNo.2) |
Re[1]: VB.Netでの画面遷移について。 |
□投稿者/ 魔界の仮面弁士 (337回)-(2013/09/12(Thu) 12:29:06)
|
2013/09/12(Thu) 13:26:08 編集(投稿者)
■No67971 (くま さん) に返信 > Windows From 環境です。 # 私も良く間違えます…。
> Me.Hide() > Dim f As New form2() > f.ShowDialog() > f.Dispose()
Close は使っておられないのでしょうか? あるいは、フォーム右上の × でも良いですけど。
上記で Hide を使っているという事は、その後で再表示の必要があるということですね。 (New しなおさずに Show/ShowDialog したり、あるいは Visislbe = True とするなど)
> この方法は正しくないのでしょうか。 問題があります。フォームの開放処理に到達することなく、 延々と Form インスタンスを作り続けることになっています。
それぞれの f.Dispose() の行にブレークポイントを貼って テストしてみましょう。
Close / Hide / Dispose などを呼び出したからといって、 ShowDialog の処理が直ちに呼び出し元に返されるわけでは ありません。今回の場合、相手方フォームは Button1_Click を まだ処理中ですので、それが End Sub に到達するまでの間、 呼び出し元が、次行すなわち f.Dispose() の呼び出しを 実行するには至らないことになります。
おそらく、Dispose / Finalize はおろか、FormClosed さえも 発生していない状態に陥っているものと推測します。
> ただ、このプログラムで遷移を繰り返すと、メモリが増えていきます。
本題からは外れますが、この場合のメモリとは、 具体的には何を測定したものでしょうか?
Process\Working Set だとしたら、未使用になった分も 再利用のために維持されるため、ある程度の閾値を超えるまでは 減少しないようになっているそうです。
Memory\Available Mbytes … 物理メモリの空きバイト数(Zeroed, Free, Standby 状態のページフレームの総バイト数) Memory\Commited Bytes … システム全体で利用されている物理・仮想メモリの最大バイト数 Memory\Pages/sec … ハード ページ フォールトを解決するためにディスクから読み書きされたページ数 Process\Private Bytes … プロセスが消費していて、他のプロセスから利用できないメモリのバイト数 Process\Working Set … プロセス全体が確保しているメモリ Process\Working Set - Private … プロセス本体が確保している(共有 DLL 等が利用する分を除く) Process\Page Faults/sec … 1秒間に処理されたページフォルトの数 .NET CLR Memory\# Bytes in all Heaps … GC ヒープに割り当てられたバイト数 .NET CLR Memory\# Total commited Bytes … GC によってコミットされている仮想メモリのバイト数
[.NET アプリケーションのメモリ使用量の監査] http://msdn.microsoft.com/ja-jp/magazine/dd882521.aspx
[.NET アプリのダンプでメモリ解析] http://troushoo.blog.fc2.com/blog-entry-131.html
|
|