0

C#クラスファイルを使用するサイトがあり、ファイルの先頭に次のように表示されます。

JTSEntities database = new JTSEntities();(ADO.NETのもの)。

同じことを何度も何度も書く気がしないので、私はそれを真上に持っています。

しかし、それは1つの疑問を提起します...それはそこの一番上にあるので、それはどのように処分されますか、そしていつ-そしてユーザーがページを閉じたときにどうやってそれを処分できますか(または私はそうする必要がありますか)?

4

3 に答える 3

6

データベース接続をラップするものを必要以上に長く保持するのは悪い習慣です。

ベスト プラクティスは、データベース接続が現在の操作 (初期値の入力など) で不要になったらすぐに解放することです。たとえば、次のようなものです。

using (JTSEntities database = new JTSEntities())
{
    // Use database
}

IDisposable を実装している場合。

なんらかの理由でページの存続期間中それを維持する必要がある場合は、ページを閉じるイベント ハンドラーで適切なメソッド (.Close()、.Dispose() など) を呼び出してリソースを解放してください。

于 2012-07-23T23:19:08.883 に答える
2

さて、属性のタイプに基づいて、それはであると言うことができますinstance attribute。これは、インスタンスが別のオブジェクトに渡されない限り、この属性はそれを持っているオブジェクトと同じライフサイクルを持つことを意味します。

保護されている場合は、所有者オブジェクトとその子(つまり、このクラスから継承するオブジェクト)のみがアクセスできます。参照引数として渡さない場合は、最初のステートメントで問題ありません。オブジェクトがクリーンアップされるとすぐに、GCによってクリーンアップされます。

このオブジェクトを通常のWebフォームページのライフサイクルで使用するだけであれば、破棄することを心配する必要はありません。ページのライフサイクルがあなたに代わってそれを行います。

よろしく

于 2012-07-23T23:20:50.460 に答える
2

このクラスに実装し、メソッドIDisposable内でこのオブジェクトを破棄します。このクラスを使用する場合は、(できればブロックDispose()を使用して) 完了したら必ず Dispose を呼び出してください。using

それ以上は、気にする必要はありません。

public class MyClass : IDisposable
{
    protected JTSEntities database = new JTSEntities();

    public void Dispose() 
    {
        database.Dispose();
    }
}

// When calling this class

using(MyClass cls = new MyClass())
{
    // Do Stuff
}  // Dispose is automatically called here.
于 2012-07-23T23:17:38.553 に答える