C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: usingの正しい使い方


(過去ログ 77 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■45593 / inTopicNo.1)  usingの正しい使い方
  
□投稿者/ ちゃー (7回)-(2010/01/15(Fri) 12:43:32)

分類:[.NET 全般] 

SqlConnectionに対して、以下のようにusingで書いていれば
例外が発生しようと、正常終了しようと
コネクションはcloseしますよね。

using句はSqlConnectionに対してだけで十分ではないのでしょうか?

というのも、よくサンプル等でSqlDataReaderやSqlCommandにもusingを付けてる
場合があります。 これはどうしてなのでしょうか?

かなり略してますが、例えばこんな感じ・・

using (SqlConnection con = new SqlConnection(setting.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("select * from aaa"))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{

}
}
}

よろしくお願いします。
引用返信 編集キー/
■45594 / inTopicNo.2)  Re[1]: usingの正しい使い方
□投稿者/ .SHO (1128回)-(2010/01/15(Fri) 12:58:23)
No45593 (ちゃー さん) に返信

> using句はSqlConnectionに対してだけで十分ではないのでしょうか?

SqlCommandやExecuteReaderでも例外が発生するかも?
だからじゃないですか。。。

引用返信 編集キー/
■45595 / inTopicNo.3)  Re[1]: usingの正しい使い方
□投稿者/ biac (170回)-(2010/01/15(Fri) 13:03:22)
biac さんの Web サイト
using は Close させるためのものではありません。
確実に Dispose() を呼び出すために使うものです。

http://msdn.microsoft.com/ja-jp/library/yh598w02.aspx
> using ステートメントは、オブジェクトで正しく Dispose メソッドを呼び出します。

つまり、Close する必要が有るか無いか、ではなく、Dispose する必要が有るか (IDisposable を実装しているクラスか) 無いかで、using するかどうかを決めます。
※ Dispose() しなくても平気なこともあるけど、いちいち判断するのはめんどくさい f(^^;

引用返信 編集キー/
■45596 / inTopicNo.4)  Re[2]: usingの正しい使い方
□投稿者/ ちゃー (8回)-(2010/01/15(Fri) 13:25:46)
たしかにDisposeするのが目的なのですが、そうなると
全てのSqlCommand、ExecuteReader等では、usingを全部に使う、もしくはDispose()させる
ことが理想だとおものですが、色々なサンプル(ネットでの情報や、売られている本等)
を見るとこのあたりが曖昧なので理想はさておき、実際はSqlConnectionでDispose()させる
ことによって結果Closeさせるくらいしか実装してないのかとおもった次第です。

Dispose()ができる場合は、みなさん全部ちゃんとDispose()しているのでしょうか?
引用返信 編集キー/
■45598 / inTopicNo.5)  Re[1]: usingの正しい使い方
□投稿者/ はつね (1160回)-(2010/01/15(Fri) 15:17:32)
はつね さんの Web サイト
No45593 (ちゃー さん) に返信
> SqlConnectionに対して、以下のようにusingで書いていれば
> 例外が発生しようと、正常終了しようと
> コネクションはcloseしますよね。

しません。

> using句はSqlConnectionに対してだけで十分ではないのでしょうか?

充分ではありません。


> というのも、よくサンプル等でSqlDataReaderやSqlCommandにもusingを付けてる
> 場合があります。 これはどうしてなのでしょうか?

NewしたものはDisposeするので必要かと。

Using con As New SqlConnection(setting.ConnectionString)
  Try
     con.Open
     Using cmd As New SqlCommand("select * from aaa")
         :
         :
     End Using
  Catch ex As Exception
  'エラー処理
  Finally
    Try
      con.close
    Catch ex As Exception
    End Try
  End Try
End Using     

引用返信 編集キー/
■45599 / inTopicNo.6)  Re[3]: usingの正しい使い方
□投稿者/ たくボン (321回)-(2010/01/15(Fri) 15:35:21)
No45596 (ちゃー さん) に返信
> たしかにDisposeするのが目的なのですが、そうなると
> Dispose()ができる場合は、みなさん全部ちゃんとDispose()しているのでしょうか?

スコープのブロックを抜けると、ガベージの対象になるから「いつか」はDisposeしてくれるんだけど、リソース(ファイルやら描画オブジェクトやら)の明示的な解放をした方が良いものについては積極的にusingを使うようにしてる。

usingブロックで囲むと、コードは長くなるけど処理構造が見やすくなる場合もあるし(特に描画系)、自作のクラスでもIDisposeの実装が必要な場合は必ず実装してるから、何も考えなくてもいいってのもあるし。
引用返信 編集キー/
■45604 / inTopicNo.7)  Re[2]: usingの正しい使い方
□投稿者/ みきぬ (714回)-(2010/01/15(Fri) 16:47:03)
No45598 (はつね さん) に返信
> ■No45593 (ちゃー さん) に返信
>>SqlConnectionに対して、以下のようにusingで書いていれば
>>例外が発生しようと、正常終了しようと
>>コネクションはcloseしますよね。
>
> しません。
>
ん?

SqlConnection に限っていえば、Close() と Dispose() の機能は同じ(だと MSDN に書いてある)ので、
Close() をおこなってくれるという認識でしたが…間違ってました?

引用返信 編集キー/
■45607 / inTopicNo.8)  Re[3]: usingの正しい使い方
□投稿者/ はつね (1163回)-(2010/01/15(Fri) 17:05:25)
はつね さんの Web サイト
No45604 (みきぬ さん) に返信
> SqlConnection に限っていえば、Close() と Dispose() の機能は同じ(だと MSDN に書いてある)ので、
> Close() をおこなってくれるという認識でしたが…間違ってました?

SqlConnectionに限っていえばそうですね。
説明補足として「だけど、それに頼らない方がいいです(汎用的な知識として)。」を付与させてください。


引用返信 編集キー/
■45627 / inTopicNo.9)  Re[4]: usingの正しい使い方
□投稿者/ 枯葉 (1回)-(2010/01/16(Sat) 18:37:06)
No45607 (はつね さん) に返信
> ■No45604 (みきぬ さん) に返信
>>SqlConnection に限っていえば、Close() と Dispose() の機能は同じ(だと MSDN に書いてある)ので、
>>Close() をおこなってくれるという認識でしたが…間違ってました?
>
> SqlConnectionに限っていえばそうですね。
> 説明補足として「だけど、それに頼らない方がいいです(汎用的な知識として)。」を付与させてください。
それだと最初の「しません」発言がおかしくないですか?
「します」ならわかりますが。

(Close)しません
だけど、それに頼らない方がいいです

では意味が全く通じないと思います。

(Close)します
だけど、それに頼らない方がいいです

なら仰る意味がよく分かりますが。
またはしませんで通すのであれば

(Close)しません
だから、それに頼らない方がいいです

とならないと文法的に繋がらなくなりますよ。
この場合は文法的には問題ないですが、実際はcloseするのでどちらにしても「しません」発言については間違っている事になるのでは?

SqlConnection限っては、といってもそもそもちゃーさんは
>>SqlConnectionに対して、以下のようにusingで書いていれば
と示してあるのですから、限るのなにもその事についてですよね?
そこを引用してレスをしているのですから。

説明補足ではなく、間違ったので訂正、の方が相応しくないですか?
引用返信 編集キー/
■45707 / inTopicNo.10)  Re[5]: usingの正しい使い方
□投稿者/ ちゃー (9回)-(2010/01/19(Tue) 08:43:58)
皆様、様々なご意見ありがとうございした。

以上

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -