- - PR -
SQLparameterとトランザクション
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-18 14:49
すみません、タイプが面倒なので、省略しちゃいました。しないわけでないです。 Command, Transaction に関して、ブログに書いているとおり、ちょっと注意が必要ではないかと思います。Transaction は Connection から派生(?)させますから、Connection をクローズすれば当然「終了」しますよね。Transaction が「終了」するということは、その内側にある Command も、「終了」していなければおかしい。終了するんだったら「破棄」もして欲しいなぁ。。。 また、DataSet などで、DataGrid などのデータソースに参照させたものは、変数を宣言したスコープを外れても、インスタンスは生きているわけで。ASP.NET だと、ページが破棄されるときにグリッドも破棄されて、その時データソースも破棄されるよね?なんて、不安になったり。。。 ・・・というわけで、最近は「まとめて宣言、まとめて Dispose」な書き方をしています。 〆 written by Jitta@わんくま同盟 on 2006/02/18 | ||||||||||||
|
投稿日時: 2006-02-18 18:28
すみません、リンクお願いします。 | ||||||||||||
|
投稿日時: 2006-02-18 20:24
これかな。 Dispose、、、 最近どこかで、渋木さんも言っていましたね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-19 05:59
リンク、ありがとうございました。
| ||||||||||||
|
投稿日時: 2006-02-20 20:24
すみません、文章だけじゃ読んでもちんぷんかんぷんだろうなと思って、あえて貼りませんでした。やってしまった実例付きで再エントリする予定です。 とりあえず、事例を書いておきます。 ブログに書いているのは、テキストを暗号化しようとして、 using (MemoriyStream stream = new MemoryStream()) { using (TextWriter writer = new TextWriter(stream)) { 書き込み処理 writer.Close(); } stream.Position = 0; using (TextReader reader = new TextReader(stream)) { 読み込み処理 reader.Close(); } stream.Close(); } としました。すると、stream.Position = 0; で、「閉じたストリームを操作することは出来ません。」という、IOException が発生します。 System.Drawing.Graphics.FromImage で取得した Graphics も、Dispose 注意です。取得もとの System.Drawing.Image が破棄されます。 〆 written by Jitta@わんくま同盟 on 2006/02/20 | ||||||||||||
|
投稿日時: 2006-02-20 23:43
南部です。
実例、ありがとうございました。 このスレッドというか、なんとなく、 「IDisposableを実装している = Disposeを実行しなければ」 という風潮があるようで。 むしろ、 「IDisposableを実装している = GCが解放してくれる」 ってのはダメかなぁ、、、 「すぐにリソースを解放して再利用できる状態にする必要がある。」 もの以外はですが。 ちなみに、
とりあえず、2005ではOKのようです。 #2003の環境消してしまったので。
この例だと
Image、GraphicsはIDisposableを実装しているで、 Testメソッドが終わったらGCが適切なタイミングで、 (ええ、私がDisposeを実行して処理を遅くするまでもなく) 解放してくれるはず。 #あぁ、危険な発言をした気分、、 #私は、Disposeしますよ、ちゃんちゃん。 | ||||||||||||
|
投稿日時: 2006-02-21 10:35
>「IDisposableを実装している = GCが解放してくれる」
>ってのはダメかなぁ、、、 GCのいいタイミングなので、実際にはまったく動かない可能性もありますしねー Windowsのハンドルなんかはすぐ使い切れますよ。 >#あぁ、危険な発言をした気分、、 >#私は、Disposeしますよ、ちゃんちゃん。 (^^ _________________ 中博俊 MSMVP Visual Studio C# Since 2004/04-2005/03, MCP http://naka.wankuma.com/ http://blogs.wankuma.com/naka/ naka@wankuma.com | ||||||||||||
|
投稿日時: 2006-02-21 11:42
GDIオブジェクトは
これに準ずるかな。 いっていることはある程度同意はしますよ。そのためのCriticalFinalizerObjectだし、GC.AddMemoryPressureですから。 しかしながら、例えばスレッド依存性だのこの話は細かく話すときりがない上、それらの話を十分に考慮できるだけの知識を持ち、それを実行することに対して根拠、実証を持つ必要もあると思います。 そこまでする必要があるなら、Disposeをとりあえず呼ぶほうを選ぶってだけです、私は。using便利だねぇ。 # 雑談のように気軽に適当に [ メッセージ編集済み 編集者: ya 編集日時 2006-02-21 11:47 ] |