解決済みの質問
質問:No.4733785
すぐに回答ほしいです
お気に入り投稿に追加する (0人が追加しました)
回答数2
閲覧数4730
C# インスタンスの破棄
C#でインスタンスの破棄を明示的に行いたいのですが、
実際の開発現場では、どのように行っているのでしょうか?

自分で調べると「ガベージコレクタ」が暗黙的に行っているようですが明示的には行わないのが普通なのでしょうか?
もしくは、「Dispose」を使用して明示的に行うのが普通なのでしょうか?

実際に開発されている方からすると簡単な事かもしれませんが教えて頂けると助かります。

以上ですが、よろしくお願いいたします。
投稿日時 - 2009-02-20 14:07:05
質問者が選んだベストアンサー
回答:No.1
結論から言うと、どちらでも良いです。
できれば生成から破棄まで考えて開発できると良いですね。

ガベージコレクションが実行されることで自動開放されますから、
一切.close()や.dispose()を使わなかったとしてもプログラムが
不正終了してしまう事はほとんどありません。

実際の開発では使わなくなったものを使わなくなった時点で
明示的に破棄することが多いです。正確には明示的に破棄するもの、
明示的に破棄しないもの、の2種類に分類しています。

例えばファイルを読み書きするストリーム系のオブジェクトや
データベースとのコネクションなどです。これは開発会社や
開発チーム、案件によって若干違っていて、徹底するところや
適当なところもあります。個人的には徹底したい派ですが。。。

ガベージコレクションが発生するとプログラムの実行動作が
遅くなり、また瞬間的に大きな負担がかかることがあります。
そのため全てをガベージコレクタに任せるのではなく、
明示的に開放できるもの、メモリを大量に消費するものは
その都度、適切に開放していくことで処理効率が良くなります。

プログラミング関連の調べ物で、サンプルソース等を見ることが
あるかと思います。この時サンプルで明示的に開放していたら、
それは明示的に開放したほうが良いもの、と思いましょう。
これだけでもステップアップになりますね。
投稿日時 - 2009-02-20 14:48:47
この回答を支持する
(現在2人が支持しています)
この質問は役に立ちましたか?
10人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答
回答:No.2
インスタンスの破棄は、変数に null を代入することで行います(もしくはロジックのスコープを抜ける時)。

Dispose について誤解している方が多いのですが、
Dispose は、あくまでインスタンスが内包している「メモリ以外の資源」を解放してもらうよう、そのインスタンスに依頼するものです(Disposeを呼ばれた時の処理は、そのクラスの実装者が適切に行う必要があります)から、全く意味が異なります。

Dispose メソッド(IDisposable インタフェース)を持つクラスのオブジェクトは、使い終わったら Dispose を呼んでくれ、というのがルールになっていますので、呼びましょう。using 句を使うのが確実です。try 句の finally 内で Dispose しても構いません。
投稿日時 - 2009-02-20 14:59:13
この回答を支持する
(現在1人が支持しています)
もっと聞いてみる
関連するQ&Aはこちら
 こんにちは。毎度皆さんにお世話になっているc#初心者です。  c#にも暗黙/明示的型変換を定義することが出来ますよね? それで、どこまでのものが暗黙の型変換として許容されるかということが疑問になり...
お世話になります。 現在C#で画像関連のプログラミングをしています。 ガベージコレクタがあるため安心してプログラムを組んでいたのですが、 参照されない画像を開放しないでいると、タスクマネージャーから...
C#において、同じインスタンスを何度もnewしてよいでしょうか。 (インターネットで探したんですが、意外に見つからなかったもので質問させていただきました。) 例えば A a = new A(); ...
この他の関連するQ&Aをキーワードで探す
プログラミングのサブカテゴリ
RSS
PR
-PR-