- - PR -
SQLparameterとトランザクション
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-21 21:54
ええ、2003 でも、たいていは OK なんです。どういうタイミングでか、ObjectDisposedException が発生するのです。
Image、Graphics で使用しているアンマネージドリソースは、いつかは解放してもらえます。が、「解放してくれない書き方」が存在します(^-^; → Dispose、、、(その2) あと、でかいリソースや、前回コレクト時に確保していたリソースは、世代が上がって回収してもらえないんじゃ?(これは未確認) | ||||||||||||||||||||||||||||
|
投稿日時: 2006-02-22 02:06
南部です。
、、、Disposeで。
うぎゃ、それはキビシい。
ん?リンクのNotReleasableクラス内のMemoryStreamは解放されますよね?「いずれ」。 NotReleasableの参照が無い且つMemoryStreamの参照が無い時に収集された場合。 NotReleasableがネイティブなリソースを保持していたらアウトですが。
GC不信、IDisposableアレルギーを緩和しようしたのに、、、、。 これじゃ、火に油。 #何度も言いますが、私はDisposeします。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-02-22 21:00
はい、、、ご指摘の通り。 # くぅ〜!やっぱり面倒がるとダメねorz 今回は「GC は Dispose しない」ということで、勘弁してくださいm(__)m ただ、「いずれ解放」されますが、その「いつか」が、開発者が望むときではありません。欲しいときに不要なものが確保しているから必要なものが取れない、という状況が発生し得ます。これを、「リーク」といっても差し支えないと思います。
「使ったものはもとの場所に戻す」……私が C 言語から来ているから、違和感なく受け入れられるだけ? 〆 written by Jitta@わんくま同盟 on 2006/02/22 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-02-22 22:07
厳密に言えば恐らく、MemoryStreamはDisposeする必要は無いと推測できますけどね。
まずマネージのみで実装されているでしょうし、アンマネージを使用していたとしても、使用するのはメインメモリリソースのみである可能性が高く(つまり他のクリティカルリソースを保持していない)、それだけならば GC.AddMemoryPressure が完全にカバーできる領域です。 また、CriticalFinalizerObjectの登場によって確実に破棄されることはファイナライザでも保障されるようになりました。 これらより、クリティカルリソース、そうですね、DBのコネクションのように「限られている、それもメインメモリ以外」という条件を満たすアンマネージリソース以外は本質的にDisposeが必要ないことになります。正確に言えばThread依存性を持つリソースも含まれますが(というかこれはDispose以外本当にどうしようもない)。 あと、Componentの基本要素としてDisposeが実装されているという事情があるため、マネージのみのComponentはDisposeを呼ぶ必要はないのに実装されている場合があります。これは呼ばなくてもよいDisposeが意外にあることを示します。 たとえばDataSetとか。こういうものはパターンとしてコンストラクタでGC.SupressFinalizeを呼べばファイナライザコストすらも発生しません。つまりDisposeを呼ぶことの意味がまったくありません。 と。色々示しましたが、こんなの実装であって知る必要なんてないし、「何でもいいから使い終わったらDispose呼べよ、そのほうが問題が少ないのだから」っていうのは何もかわりませんけどね。 ただしまぁ、破棄範囲ぐらいはドキュメントにしっかりと書いてほしいものですね(Streamには「もととなるやつを閉じる」と書いてあるしそうする、しかしConnectionはCommandをDisposeしてもDisposeされなかったりと統一性はないようなので)。破棄されていればすぐにバグとして表に出てくるのでそれほど重大視するものでもないかもしれませんが。 # 大丈夫なのもあるんですが、大丈夫じゃないものもあるんです。 # そして大丈夫なものに対して呼んでも大丈夫なので呼べば全部大丈夫。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-02-22 23:09
この二言につきるかと、思います。 |
«前のページへ
1|2|3