0

静的変数のライフサイクルを設定する方法はありますか?つまり、リセットされるまでにどれだけ長く存続するのですか?適用できる属性があるのではないかと期待していました。

4

4 に答える 4

9

静的変数の値の有効期間は、AppDomainを含む値と同じです。つまり。新しいAppDomainを取得すると(IISアプリケーションが再起動するため)、静的変数の新しいコピーを取得します。

于 2012-07-09T12:05:00.757 に答える
3

静的メンバーは、型のインスタンスではなく、型自体に関連付けられます。したがって、それらのライフサイクルは作成のタイミングと順序に制限され、タイプのインスタンスによって「リセット」されることはありません。

于 2012-07-09T11:44:26.623 に答える
1

私の場合、ASP.NETを使用しているので、問題のアイテムは1つの要求のライフサイクルの間「ライブ」のままである必要があるため、それについて考えた後、HttpContext["Items"]コレクションが最適です。たとえば、代わりに次の場合:

    private static SomeObject _books;
    protected static SomeObject Books
    {
        get
        {
            if (_books == null) {
                _books = new SomeObject();
            }
            return _books ;
        }
    }

    protected static SomeObject AVariable
    {
        get
        {
            SomeObject books = HttpContext.Current.Items["books"] as SomeObject; 
            if (books == null) {
                books = new SomeObject();
                HttpContext.Current.Items["books"] = books;
            }
            return books;
        }
    }
于 2012-07-10T12:54:36.317 に答える
0

静的変数は、アプリケーションの存続期間中保持され、すべてのスレッド間で共有されます。アプリケーションが再起動したときにのみリセットされます(たとえば、web.configの変更)。

これがキャッシュのようなものである場合は、定期的に値を更新するようにタイマーを設定することをお勧めします。

于 2012-07-09T11:35:22.393 に答える