ASP.NET cacheキャッシュの使い方



本文のガイド:NET運用ではキャッシュオブジェクトがよく用いられる.HttpContext.Current.CacheとHttpRuntime.Cache,HttpRuntime.Cacheはアプリケーションレベルで、HttpContext.Current.Cacheは現在のWEBコンテキストに対して定義されている.HttpRuntimeの下にあるのはWEBで使えるほかWEB以外のプログラムでも使えます.
1、HttpRuntime.Cacheはキャッシュの具体的な実装クラスに相当する、このクラスはSystemに置かれているが.Webネーミングスペースの下にあります.しかし、Webアプリケーションでなくても使えます.
2、HttpContext.Cacheは、上述したキャッシュクラスのカプセル化であり、HttpContextにカプセル化されているため、HttpContextを知っている限りでしか使用できない、すなわちWebアプリケーションにのみ使用できるようになっている.
所属する条件を総合して、できるだけHttpRuntime.HttpContextではなくCacheCache .
 
一、以下のキャッシュデータのルール
第一に、データは頻繁に使用される可能性があり、このデータはキャッシュすることができる.
第二に、データのアクセス頻度が非常に高いか、1つのデータのアクセス頻度が高くないが、生存周期が長いため、このようなデータもキャッシュしたほうがよい.
第三に、よく無視される問題です.多くのデータをキャッシュしている場合があります.通常、X 86のマシンで、キャッシュするデータが800 Mを超えると、メモリオーバーフローのエラーが発生します.だからキャッシュは限られています.言い換えれば、キャッシュセットのサイズを推定し、キャッシュセットのサイズを10以内に制限する必要があります.そうしないと、問題が発生する可能性があります.Asp.Netでは,キャッシュが大きすぎるとメモリオーバーフローエラーも報告されるが,特に大きなDataSetオブジェクトがキャッシュされている場合である.
あなたのプログラムを真剣に分析しなければなりません.実際の状況から見ると、どこが使うべきか、どこが使うべきではないか.例えば、cacheを使いすぎると、サーバの圧力が大きくなります.ページ全体の出力キャッシュは、データの更新にも影響します.本当に大量のデータをキャッシュする必要がある場合は、静的テクノロジーを考慮することができます.
 
二、次にHttpRuntimeを紹介する.Cacheの一般的な方法
 
C#コード
using System;
using System.Web;
using System.Collections;

public class CookiesHelper
    {
    /** 
    ///       
    /// 
    ///  
    public static object GetCache(string CacheKey)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        return objCache[CacheKey];
    }

    /** 
    ///       
    /// 
    public static void SetCache(string CacheKey, object objObject)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, objObject);
    }

    /** 
    ///       
    /// 
    public static void SetCache(string CacheKey, object objObject, TimeSpan Timeout)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, Timeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);
    }

    /** 
    ///       
    /// 
    public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
    }

    /** 
    ///         
    /// 
    public static void RemoveAllCache(string CacheKey)
    {
        System.Web.Caching.Cache _cache = HttpRuntime.Cache;
        _cache.Remove(CacheKey);
    }

    /** 
    ///       
    /// 
    public static void RemoveAllCache()
    {
        System.Web.Caching.Cache _cache = HttpRuntime.Cache;
        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
        while (CacheEnum.MoveNext())
        ...{
            _cache.Remove(CacheEnum.Key.ToString());
        }
    }
}

三、実戦、個人種目
1、最初のステップはglobal.asax加入
    void Application_Start(object sender, EventArgs e)
    {
        //              
        try
        {
            //       
            string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            System.Data.SqlClient.SqlDependency.Start(conStr);//      ,ps:      
            System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(conStr);//          ,ps:      
            string[] str = { "TMS_OptionScoreDetails", "TMS_TeachAssess", "TMS_TeachAssessDetail", "TMS_TeachAssessPublish", "TMS_TeachAssessRecord", "TMS_TeachAssessRecordDetails", "TMS_TeachOption" };
            System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(conStr, str);//            ,ps:      


        }
        catch
        {

        }
    }

2、ステップ2では、キャッシュクラスを参照し、プロジェクト用に適用します.
          //  
            DataSet myDataSet = new DataSet();

            string CacheKey = "SearchDate" + TeachAssessID;
            object objModel = TMSCommonMethod.GetCache(CacheKey);//      
            if (objModel == null)//     
            {
                TMSTeachAssessDetailManager myTMSTeachAssessDetailManager = new TMSTeachAssessDetailManager();
                TMSTeachAssessDetailQuery myTMSTeachAssessDetailQuery = new TMSTeachAssessDetailQuery();
                //myTMSTeachAssessDetailQuery.TeachAssessPublishID = TeachAssessPublishID;
                myTMSTeachAssessDetailQuery.TeachAssessID = TeachAssessID;
                myDataSet = myTMSTeachAssessDetailManager.SearchDate(null, myTMSTeachAssessDetailQuery);

                objModel = myDataSet;//       
                if (objModel != null)
                {
                    
                    System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency(ConfigurationManager.AppSettings["CacheDataBaseName"].ToString(), TMSTeachAssessDetail.TABLENAME);
                    TMSCommonMethod.SetCache(CacheKey, objModel, dep);//    
                }
            }
            else
            {
                myDataSet = (DataSet)objModel;
            }