
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
VB.netでメソッドからコントロ...
-
親クラスの型で子のオブジェク...
-
prototypeについて
-
Vba ListViewの行挿入に関して...
-
.matchの使用方法
-
LiveConnectって?
-
InternetExplorer.Application...
-
Smartyでのエラー
-
html形式で保存
-
Listのiteratorインターフェー...
-
Excel Book の変更の検知
-
C#のクラスで値渡しをする
-
下記のようなjavaのプログラム...
-
Pyhonを見ていて、関数とメゾッ...
-
最終配列にNULLが含まれる...
-
VBA FSOの詳細説明はどこ?
-
Objective-Cのプログラム式につ...
-
mapの値を全件取得
-
DOMと同名のユーザ定義メソッド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
エクセルVBA/SpecialCellsで特...
-
Vba ListViewの行挿入に関して...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
UTF-8のテキストファイルを開く...
-
javaで、、、
-
System.Collections.SortedList
-
C#でのExcel操作について.(Ran...
-
VBSのGetFolderメソッドについ...
-
JSPでのArrayListの表示につい...
-
ピクチャーボックスに点を打つ...
-
VBAでの[]
おすすめ情報