1

asp.net 実行パスのため、静的変数を使用する必要があります。マスターページと呼び出されるページに同じ変数が必要です。静的変数は、静的なままであるため、変数を非常に簡単に引き継ぐことができます。残念ながら、アプリが実際に「終了」していないため、これらの変数はメモリのエーテルにハングアップします。これらの変数を使い終わったときにこれらの変数を破棄する方法はありますか? 私は調べた

IDisposable

しかし、その実装は...クリーンではありません。ページのレンダリングが終了したときに変数を破棄する方法はありますか?

4

5 に答える 5

9

asp.net 実行パスのため、静的変数を使用する必要があります。マスターページと呼び出されるページに同じ変数が必要です。静的変数は、静的なままであるため、変数を非常に簡単に引き継ぐことができます。

マスター ページとそのコンテンツ ページの間でデータを共有するためだけに静的フィールドを使用することを「強制」されるわけではありません。おそらくどちらも望まないでしょう: 静的フィールドは、アプリケーションのすべてのユーザーからのすべてのリクエスト間で共有されます。つまり、それらはスレッドセーフであり、すべてのユーザー間で共有されるデータに限定される必要があります。

マスター ページとコンテンツ ページの間でデータを共有する方法は多数あります。たとえばHttpContext.Items、単一のリクエストの間だけ存在するディクショナリを使用できます。

于 2012-06-27T15:24:59.063 に答える
2

静的変数を「ふり」する方法を探している人は、次のように実行できます。

public static Datatype data
{
    get
    {
        return (Datatype)HttpContext.Current.Items["DATA"];
    }
    set
    {
        HttpContext.Current.Items["DATA"] = value;
    }
}

私が理解している限り、これは必ずしも「kill static」値を解決する必要はありませんが、静的変数によって引き起こされるデータの衝突を回避する必要があります。プロジェクト全体で静的変数を参照し、それを変更すると、見られるよりも厄介なコードが作成されました。このように、静的オブジェクトから「DATA」を取得するために呼び出しが行われると、指定されたものは取得されず、後で強制終了され、セッションに固有のコンテキスト リストが使用されます。

于 2012-06-27T15:59:47.620 に答える
0

に設定できますnull。ASP.Net WebForms を使用している場合は、Page.Unloadイベント ハンドラー内でこれを行うことができます。

于 2012-06-27T15:17:53.460 に答える
0

マスター ページで静的プロパティを使用することは避け、Session[""] 変数を使用する必要があります。これらの変数は、ユーザーがセッションを終了すると破棄されます。

于 2012-06-27T15:19:05.160 に答える
0

セットアップを知らず、クラウド環境の将来についても考えずに、複数のサーバーがユーザーの要求に応答する可能性があり、同じサーバーがそのユーザーまたはロード バランサーの要求のすべての要求に応答するかどうかわかりません。他のサーバーで続行するには、現在行っているように、2 つのオプションを提供します

オプションの前に、Web 環境では、セッションまたは静的変数の使用を停止することをお勧めします (上記の理由により)。

クッキーを使用する

Cookie を使用してある場所から別の場所に値を渡し、消費されたときに有効期限データを 1 年前に書き戻すだけで、Cookie は消えてしまいます!

MemCached を使用する

私は常にアプリケーションとデータベースの間にキャッシュ層を持っています。これは、データベースからすべてのユーザーに提供するだけでなく、クロスアプリケーションが必要な場合に変数を保持するための最良の方法です。

MemCached無料で、Windows 上で正常に動作します。また、サーバーでこれを提供するクラウド サービスがいくつかあります。

于 2012-06-27T15:30:13.423 に答える