0

次のようなコードを取ります:

    Dim dt As New DataTable("Table")
    Dim sda As New SqlDataAdapter(pQuery, pCon)

    sda.SelectCommand.CommandTimeout = pCommandTimeout
    sda.Fill(dt)
    sda.Dispose()

    Return dt

と:

    Dim myconnection As SqlConnection = New SqlConnection(DBValues.m_sDBString)
    myconnection.Open()

    Try
        Dim com As New SqlCommand(cmd, myconnection)
        com.ExecuteNonQuery()
        com.Dispose()
    Catch ex As Exception
        Throw ex
    Finally
        If myconnection.State = ConnectionState.Open Then
            myconnection.Close()
            myconnection.Dispose()
        End If
    End Try

Close() や Dispose() などを明示的に呼び出すことが過剰になっているのはいつですか? どうやら GC はほとんどの場合これを内部的に処理しますが、常にではありません (?)。これまでのところ、これが過剰な場合とそうでない場合を区別する方法、またはこれを明示的に行うこととGCに処理させることの違いについて、非常に明確で明確な説明を誰かが下したのを見たことがありません。誰かがこれを説明できますか?ありがとう!

4

1 に答える 1

3

例よりも複雑なことをしていない場合は、おそらくやり過ぎです。

usingキーワードを使用して物事を簡単にすることができます。Disposeを実装するクラスからのオブジェクトのメソッドの呼び出しを自動化しますIDisposable

usingVB.NET のキーワードに関する関連ドキュメント

Disposeまた、 の メソッドもそのメソッドをSqlConnection呼び出すことに注意してCloseください (コードで行うのと同じ状態検証を実行します)。

Disposeを使用する代わりに、手動で呼び出す必要がある場合があることに注意してくださいusing。たとえば、データ リーダーを複数のコンテキストで使用したい場合があるためusing、それらのいずれかで使用することは望ましくない場合があります。自分がこれらの状況のいずれかに陥っていることがわかるので、Dispose自分に電話するのはやり過ぎではありません。しかし、その時だけ。

于 2013-06-10T18:20:02.687 に答える