プロが教えるわが家の防犯対策術!

C#でインスタンスの破棄を明示的に行いたいのですが、
実際の開発現場では、どのように行っているのでしょうか?

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

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

以上ですが、よろしくお願いいたします。

A 回答 (2件)

結論から言うと、どちらでも良いです。


できれば生成から破棄まで考えて開発できると良いですね。

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

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

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

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

プログラミング関連の調べ物で、サンプルソース等を見ることが
あるかと思います。この時サンプルで明示的に開放していたら、
それは明示的に開放したほうが良いもの、と思いましょう。
これだけでもステップアップになりますね。
    • good
    • 0

インスタンスの破棄は、変数に null を代入することで行います(もしくはロジックのスコープを抜ける時)。



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

Dispose メソッド(IDisposable インタフェース)を持つクラスのオブジェクトは、使い終わったら Dispose を呼んでくれ、というのがルールになっていますので、呼びましょう。using 句を使うのが確実です。try 句の finally 内で Dispose しても構いません。
    • good
    • 5

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A