2

プログラムにキャッシュを実装しようとしています。いくつかの学習コースへのユーザー アクセスを提供する Web アプリケーションがあります。ユーザーがログオンすると、データベースからユーザーを認証します。今、リストから別のコースにアクセスする場合、データベースに戻りたくありません。代わりに、値をキャッシュに保存したいと思います。たとえば、20 分間です。プログラムは、1) ユーザーを認証し、コースにアクセスできるようにする必要があります。彼がコースを変更した場合、プログラムはキャッシュを検索する必要があります。ユーザー ID が存在する場合は、サーバーに戻らずにコースにアクセスできるようにします。2) 20 分後にユーザーがまだシステムにいる場合、ユーザーがログオフしないように自動的に時刻を更新するメカニズムを提供します。私はこのようなことを試しました

Cache ch = new Cache();
ch.Add("key","value);

しかし、2番目のステートメントでnull参照例外が発生します。私はこれまでキャッシュを使用したことがないので、ポインタをいただければ幸いです。

4

4 に答える 4

2

さて、これは私がそれを使用する方法です:

/// <summary>
/// Get Data
/// </summary>
/// <returns>data</returns>
public static ElementOut GetData()
{
    //function return value
    ElementOut functionReturnValue = new ElementOut();

    try
    {
        string key = "data";
        if (HttpRuntime.Cache[key] == null)
        {
            //fetch data
            var data = CreateBLLAdapter().GetData();

            //validate data
            if (data == null) throw new Exception("data is empty!");

            //set cache to 12 hours
            DateTime timeToExpire = DateTime.Now.AddHours(12);

            //set cache
            HttpRuntime.Cache.Insert(key, data, null, timeToExpire, Cache.NoSlidingExpiration);
        }

        //set return from cache
        functionReturnValue = (ElementOut)HttpRuntime.Cache[key];

    }
    catch (Exception ex)
    {
        //Log.WriteServerErrorLog(ex);
    }

    return functionReturnValue;
}
于 2012-05-31T05:29:10.177 に答える
1

Cache現在の HTTP コンテキストの使用:

HttpContext.Current.Cache

説明: 新しい HTTP 要求が来ると、アプリケーションは、一般にRequest Process Pipelineと呼ばれるパイプラインでその要求を処理します。つまり、要求を処理するためにハンドラーに要求を渡す前に、要求に対していくつかのアクションを次々に実行します。

ASP.NET が実行するアクションの 1 つは、いくつかのパラメーターに基づいてセッションを読み込み、データをキャッシュすることです。

HttpContext.Current.Cacheロードされたキャッシュであり、使用できます。次に、そのキャッシュに何かを格納すると、ASP.NET が再びそのキャッシュを格納し、次の HTTP 要求で保存する責任を負います。

Cacheページのプロパティを使用して、そのグローバル オブジェクトにアクセスすることもできます。

于 2012-05-31T05:34:20.343 に答える
0

ASP.NET で開発する場合、各ユーザーの値を保存するASP.NET セッション ストアを、ユーザーのセッションが続く限り (既定では最後のアクションから 20 分)使用するだけで済みます。

于 2012-05-31T05:30:55.830 に答える
0

出力キャッシュを試すことができます。

詳細については、以下のリンクを参照してください。 http://msdn.microsoft.com/en-us/library/ms178597.aspx

于 2012-05-31T05:31:55.600 に答える