C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: VB.Netでの画面遷移について。


(過去ログ 115 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■67971 / inTopicNo.1)  VB.Netでの画面遷移について。
  
□投稿者/ くま (22回)-(2013/09/12(Thu) 10:47:40)

分類:[.NET 全般] 

Visual Studio 2010 VB.Net Windows From 環境です。


フォーム1とフォーム2があります。

フォーム1からフォーム2に遷移します。
また逆もあります。

フォーム1の遷移ボタンクリック。下記プログラムです。
Me.Hide()
Dim f As New form2()
f.ShowDialog()
f.Dispose()

フォーム2の遷移ボタンクリック。下記プログラムです。
Me.Hide()
Dim fAs New form1()
f.ShowDialog()
f.Dispose()

ただ、このプログラムで遷移を繰り返すと、メモリが増えていきます。
この方法は正しくないのでしょうか。
引用返信 編集キー/
■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
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -