![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
Disposeというか,System.IDisposableインターフェイスについてになります。
まず,System.IDisposableを調べると,クラスのsummaryに,
「割り当てられたアンマネージ リソースを解放するメソッドを定義します。」
とあります。
MSDN: IDisposable インターフェイス (System)
http://msdn.microsoft.com/ja-jp/library/system.i …
元々は,.NET Frameworkが管理しないリソース,つまりはメモリ以外のリソースを解放する共通のインターフェイスとして用意されました。
つまり,リソースAではCloseを,リソースBではDiscardを,etc. のようなことが無いように,IDisposable.Disposeに一本化したものです。
C#では当初(1.0)から,VBでは8.0 (2005)から,Usingステートメントが追加されていますが,これはIDisposableによるリソースの管理を簡易にするための物です。
ただし,上記は.NET Framework 2.0のMSDNです。
故意に2.0を持ち出したのは意味がありまして,3.5になると以下のように変わっています。
「割り当てられたリソースを解放するメソッドを定義します。」
MSDN: IDisposable インターフェイス (System)
http://msdn.microsoft.com/ja-jp/library/system.i …
つまり,元々はアンマネージリソースを想定していたが,現在ではマネージリソースでも使うことが存在しているようです (例示ができないので曖昧)。
さて,IDisposableの使い方についてです。
[呼び出し側として使う場合]
こちらの方が当然多いわけですが,
・自分が管理責任を持っているオブジェクト
基本的にはNewしたオブジェクトですが,System.Net.WebRequest.GetReseponseのように,管理がまわってくるオブジェクトも存在します。
これに関しては,理由がない限り使い終わったら速やかにIDisposable.Disposeを呼び出すべきです。
・自分が管理責任を持っていないオブジェクト
System.Windows.Forms.Control.Paintイベントのe.Graphicsなどが該当します。
これに関しては,IDisposable.Disposeを呼び出してはいけません。
[IDisposableを実装する場合]
実はこれも結構起きたりします。
・自分がアンマネージリソースを扱っている場合
そのリソースを解放する必要があるのであれば,IDisposableを実装する必要があります。
MSDN: アンマネージ リソースをクリーンアップするための Finalize および Dispose の実装
http://msdn.microsoft.com/ja-jp/library/b1yfkh5e …
・フィールドがIDisposableを実装している場合
これは,呼び出し側として使う場合の管理責任を持つかどうかに依存します。
持つならば,IDisposableを実装し,IDisposable.Dispose内でフィールドのIDisposable.Disposeを呼び出す必要があります。
参考になりそうな資料ですが,
MSDNマガジン: CLR 徹底解剖: IDisposable について
http://msdn.microsoft.com/ja-jp/magazine/cc16339 …
GDNJ: GotDotNet Japan 掲示板 / スレッド: IDisposable/Dispose/using に関して
http://www.microsoft.com/japan/msdn/community/gd …
などがあります。後者は2003年,つまりは.NET Frameworkの初期の頃の議論ですが,結構重要な議論だと思います。
# ログの破損が惜しいところです。
No.2
- 回答日時:
簡単に言えば、値形の変数やクラスをインスタンス化したものを大量に放置しておくと、コンピューターのメモリを無駄に消費してしまいます。
.NET Framework にはこれらを自動的に開放する機能がついていますが、その開放時期は微妙で、特にどこから参照されているかがあいまいなクラスの場合は、うまく開放されなかったりします。
このような「メモリ・リーグ」をおさえるため、特に画像系のクラスの場合、いらなくなった後にはかならずDispose()メソッドを実行しましょう。
(例)
Dim g as New Bitmap
g.Dispose()
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 If you dispose of a problem, task, or question, yo 2 2023/08/01 16:59
- 麻雀 麻雀点数精算時のウマとオカの歴史 1 2022/09/14 09:21
- PowerPoint(パワーポイント) PowerPointの背景について 1 2023/03/12 15:22
- クレジットカード 楽天ポイント最大5重取り やっている方はいますか 面倒ではないですか お得ですか 2 2023/02/05 21:57
- Illustrator(イラストレーター) 素人の自称絵師です。 知り合いのつてで、来年の年賀状用のイラストを頼まれています。 アイビスペイント 2 2023/03/06 21:01
- デザイン 19世紀ロンドンのような背景イラストを探しています。 twitterやpixivに投稿のため、自分の 1 2022/08/31 09:42
- Photoshop(フォトショップ) MacでPhotoshopに使い方 教えて! 2 2023/07/08 08:24
- コーヒーメーカー・電気ケトル・電気ポット 家で使っている電気ケトルと同じ製品のケトルが、TV番組の背景に出てきました。 あなたの家で使っている 2 2022/08/19 07:21
- その他(悩み相談・人生相談) 疑問に思っていることがあります。 うつ病を患っている方(70代女性)が、他人に気を使いすぎるため、そ 2 2023/02/16 00:31
- ノートパソコン ノートパソコンで動画編集をするようになってから立ち上がるまで時間がかかるようになりました 11 2023/06/01 16:15
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VB.NETでのnothing の意義について
Visual Basic(VBA)
-
FriendとPublicの違い。。。
Visual Basic(VBA)
-
-
4
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
5
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
6
[VBA] Classから他のClassを呼び出す場合
Visual Basic(VBA)
-
7
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
8
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
9
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
10
小数点を含む数値かどうか判断の判断方法
Visual Basic(VBA)
-
11
変数名の付け方
Java
-
12
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
13
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
14
SELECT 文 GROUP での1件目を取得
SQL Server
-
15
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
16
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
17
”パラメータ値を TextBox から String に変換できません
SQL Server
-
18
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーブレットコンテキストの意...
-
VB.netでメソッドからコントロ...
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
JSPでのArrayListの表示につい...
-
PrintFormを使用してのプリント
-
C#のクラスで値渡しをする
-
Javaでブラウザ判定
-
C#で親にイベントを投げる方法
-
SocketでXMLオブジェクトを送信...
-
VB.NETでのnothing の意義について
-
getParameter()について
-
ADOのRecordSet.Openの引数につ...
-
System.Collections.SortedList
-
エクセルVBA/SpecialCellsで特...
-
VBAでの[]
-
VBS でのソート処理Excel2003
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
JSPでのArrayListの表示につい...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Excel VBA 定数にオブジェクト...
-
Vba ListViewの行挿入に関して...
-
javaで、、、
-
Dispose()は、どんな時に使うの...
-
VB.NETでのnothing の意義について
-
getParameter()について
-
String型からlong型への変換は...
-
JTableで値を右寄せ表示する方法
-
C#で親にイベントを投げる方法
-
Javaでブラウザ判定
-
VBスクリプトでテキストファイ...
-
PrintFormを使用してのプリント
-
UTF-8のテキストファイルを開く...
おすすめ情報