サーチ…


IDisposableの基本コンセプト

IDisposableを実装するクラスをインスタンス化する.Dispose 、そのクラスの使用を終了したらそのクラスの.Dispose 1を呼び出す必要があります。これにより、クラスは、使用されている管理対象または管理対象外の依存関係をクリーンアップすることができます。これを行わないとメモリリークが発生する可能性があります。

Usingキーワードは、 明示的に呼び出すことなく.Disposeが呼び出されることを保証します。

例えばUsingない場合の例:

Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()    

今すぐUsing

Using sr As New StreamReader("C:\foo.txt")
    Dim line = sr.ReadLine
End Using '.Dispose is called here for you

1つの主な利点Using例外がスローされたとき、それは保証するからしているが、ある.Dispose呼ばれています。

以下を考慮する。例外がスローされた場合は、.Disposeを呼び出すことを覚えておく必要がありますが、ヌル参照エラーなどが発生しないようにオブジェクトの状態をチェックする必要があります。

    Dim sr As StreamReader = Nothing
    Try
        sr = New StreamReader("C:\foo.txt")
        Dim line = sr.ReadLine
    Catch ex As Exception
        'Handle the Exception
    Finally
        If sr IsNot Nothing Then sr.Dispose()
    End Try

ブロックを使用するということは、これを覚えておく必要はなく、 try内にオブジェクトを宣言することができます。

    Try
        Using sr As New StreamReader("C:\foo.txt")
            Dim line = sr.ReadLine
        End Using
    Catch ex As Exception
        'sr is disposed at this point
    End Try

1 DbContextオブジェクトで常にDispose()を呼び出す必要がありますか?いいえ

1つのオブジェクトをより多く宣言する

場合によっては、2つのDisposableオブジェクトを連続して作成する必要があります。ブロックUsingネストUsing避ける簡単な方法があります。

このコード

Using File As New FileStream("MyFile", FileMode.Append)
    Using Writer As New BinaryWriter(File)
        'You code here
        Writer.Writer("Hello")
    End Using
End Using

これに短縮することができます。主な利点は、インデントレベルを1つ増やすことです。

Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
    'You code here
    Writer.Writer("Hello")
End Using


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow