tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: form_load
投稿日: 2007/07/31(Tue) 14:42
投稿者魔界の仮面弁士
> using ステートメントを使うとdisposeメソッドを省略できるとのことですが
そうです。(Dispose とは、「処分する」という意味です)
より正確にいえば、「IDisposable インターフェイスの Dispose メソッド」が
自動的に呼び出されるようになるということです。

Using ステートメントを使うと、処理中にエラーが発生したとしても、
必ず Dispose が呼び出される仕掛けになっているため、単に Dispose を呼ぶよりも、
エラーに強い安全なコードとなります。


> ちなみにusing を使わず disposeもしないとどんな不都合があるのでしょうか。。
"不都合"の内容はクラスによって異なりますが、たとえば「メモリ不足エラーが発生」
「処理速度が低下する」「オブジェクトの作成処理が失敗する」などが発生します。


たとえば、『電話回線』や『データベース接続』を開く場合を想像してみてください。

通信要求があれば、接続を開く必要があります。
しかし接続を開いたあと、もし通信終了後も、回線を切断せずに放置しておいたとしたら、
接続数ばかりが増えてしまい、いずれ回線がパンクしてしまうでしょう。


OS の資源の場合にも、同じことがいえます。
IDisposable を実装したクラスでは、原則として、作成したオブジェクトを、
作成者自身が破棄しなければならないのです。

# IDisposable なクラスの具体例としては、たとえば Graphics, Font, Pen, Brush などの
# 描画系クラス、MemoryStream, FileStream などのメモリ/ファイル操作用の
# ストリーム系クラス、OleDbConnection, SqlConnection などのDB接続系クラスなどです。


ただし、他の人が作ったオブジェクトや、他の場所でも使われるオブジェクトは、
勝手に破棄してはいけません。それらをうっかり破棄してしまうと、他の場所で
破棄済みのオブジェクトが使われる時に、エラーとなってしまうでしょう。

たとえば、.CreateGraphics() などで『作成』した Graphics は、自身で Dipose
しなければいけませんが、Paint イベントの引数などから『取得』した Graphics などは、
.NET 側によって処理されますので、勝手に Dispose してはいけません。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。