ASP.NET cacheキャッシュの使い方
5391 ワード
本文のガイド: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#コード
三、実戦、個人種目
1、最初のステップはglobal.asax加入
2、ステップ2では、キャッシュクラスを参照し、プロジェクト用に適用します.
本文のガイド: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;
}