No.2
- 回答日時:
簡単に言えば、値形の変数やクラスをインスタンス化したものを大量に放置しておくと、コンピューターのメモリを無駄に消費してしまいます。
.NET Framework にはこれらを自動的に開放する機能がついていますが、その開放時期は微妙で、特にどこから参照されているかがあいまいなクラスの場合は、うまく開放されなかったりします。
このような「メモリ・リーグ」をおさえるため、特に画像系のクラスの場合、いらなくなった後にはかならずDispose()メソッドを実行しましょう。
(例)
Dim g as New Bitmap
g.Dispose()
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の初期の頃の議論ですが,結構重要な議論だと思います。
# ログの破損が惜しいところです。
お探しの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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VB.NETでのnothing の意義について
Visual Basic(VBA)
-
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
-
4
visual studio2019でデバッグができません
Visual Basic(VBA)
-
5
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
6
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
7
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
8
VB6で呼び出し元の情報を取得する方法について
Visual Basic(VBA)
-
9
小数点を含む数値かどうか判断の判断方法
Visual Basic(VBA)
-
10
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
11
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
12
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
13
変数名の付け方
Java
-
14
FriendとPublicの違い。。。
Visual Basic(VBA)
-
15
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
16
”パラメータ値を TextBox から String に変換できません
SQL Server
-
17
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
18
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
19
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
20
DataSetから、DataTableを取得したい。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netでメソッドからコントロ...
-
C#のクラスで値渡しをする
-
エクセルVBA 画像を貼り付ける...
-
VB.NETでのnothing の意義について
-
エクセルVBA/SpecialCellsで特...
-
UTF-8のテキストファイルを開く...
-
javaで、オブジェクトを生成し...
-
javaで配列の中身を表示する方法
-
引数のないhasOwnProperty
-
JSTのDateオブジェクトが作...
-
VBA Workbooks.open
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
エクセルVBA 画像を貼り付ける...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
javaで、、、
-
VB.NETでのnothing の意義について
-
Dispose()は、どんな時に使うの...
-
ピクチャーボックスに点を打つ...
-
VBスクリプトでテキストファイ...
-
String型からlong型への変換は...
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
エクセルVBA/SpecialCellsで特...
-
getParameter()について
-
VBS でのソート処理Excel2003
おすすめ情報