问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP.NET缓存常见的4种方式有哪些

发布网友 发布时间:2022-04-22 13:45

我来回答

2个回答

懂视网 时间:2022-05-19 15:04

本文为大家分享了4种常见的ASP.NET页面缓存方式,供大家参考,具体内容如下

1、分布式缓存Memcached,教程下载

2、内存缓存,此占用服务器资源

#region 内存缓存 
 public class MemoryCache 
 { 
 #region 写 
 /// <summary> 
 /// 向内存写入数据缓存 
 /// </summary> 
 /// <remarks>TOMMYHU2011-7-28 10:25创建</remarks> 
 /// <param name="cachekey">缓存标识关键字</param> 
 /// <param name="cacheresult">需要存放的数据</param> 
 /// <param name="cachetime">单位秒</param> 
 public static void InertMemoryCache(string cachekey, object cacheresult, int cachetime) 
 { 
 if (cacheresult != null) 
 { 
 System.Web.HttpRuntime.Cache.Insert(cachekey, cacheresult, null 
 , System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cachetime)); 
 } 
 } 
 #endregion 
 #region 读 
 /// <summary> 
 /// 根据缓存标识读取内存缓存信息 
 /// </summary> 
 /// <remarks>TOMMYHU2011-7-28 10:25创建</remarks> 
 /// <param name="cachekey">缓存标识关键字</param> 
 /// <returns>内存缓存数据</returns> 
 public static object ReadMemoryCache(string cachekey) 
 { 
 object obj = System.Web.HttpRuntime.Cache.Get(cachekey); 
 if (obj != null) 
 { 
 return obj; 
 } 
 return null; 
 } 
 #endregion 
 } 
 #endregion 

3、XML缓存,这种最为常见

 #region xml缓存 
 public static class XmlCache 
 { 
 private static string m_CacheFolderName = null; 
 
 #region 获取/生成缓存文件方法(无cmdParams) 
 /// <summary> 
 /// 获取/生成缓存文件方法(DataTable) 
 /// </summary> 
 /// <param name="SQL">用于将Sql转化为MD5字符串</param> 
 /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> 
 /// <param name="CacheTime">缓存时间</param> 
 /// <param name="DataUsed">使用的数据库的链接字符串</param> 
 /// <returns></returns> 
 public static DataTable CacheFileByDataTable(string SQL, string CacheFilePath, int CacheTime) 
 { 
 SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper(); 
 if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/")) 
 { 
 CacheFilePath = CacheFilePath.Remove(0, 1); 
 } 
 
 string SqlMd5 = SQL;//用于将Sql转化为MD5字符串 
 
 string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5, "MD5");//生成的Md5文件名 
 
 string MyCacheFilePath = ""; 
 
 if (CacheTime >= 10000)//如果大于20天的话系统默认为持久 
 { 
 MyCacheFilePath = XmlCache.CacheFolderNameP + CacheFilePath;//用于存放Xml文件的相对路径 
 } 
 else 
 { 
 MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径 
 } 
 
 
 int MyCacheTime = CacheTime;//缓存时间(分) 
 
 DataTable dt = new DataTable();//存放数据记录的DataTable 
 
 DataTable CacheDt = new DataTable();//获取缓存数据记录的DataTable 
 
 
 //尝试获取缓存数据记录 
 try 
 { 
 CacheDt = DataTableCache.GetDTCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5); 
 } 
 catch 
 { 
 CacheDt = null; 
 } 
 if (CacheDt != null)//获取到缓存的XML文件 
 { 
 dt = CacheDt; 
 } 
 else//未获取到缓存的XML文件 
 { 
 //生成DataTable(如果用Query查询请用Query.ProcessSql方法) 
 //dt = Query.ProcessSql(SqlMd5, DataUsed); 
 dt = QuerySql.retDT(SQL); 
 
 //将DataTable存为XML文件 
 try 
 { 
 if (dt.DataSet != null) 
 { 
 dt.DataSet.Tables.Remove(dt); 
 } 
 
 DataTableCache.SetDTCache(MyCacheFilePath, StrSqlByMd5, dt); 
 } 
 catch (Exception ex) 
 { 
 //Log.GetComLogger().Error("将DataTable存为XML文件出错:" + ex.Message); 
 } 
 } 
 return dt; 
 } 
 
 /// <summary> 
 /// 获取/生成缓存文件方法(DataSet) Add By WJ 08-10-23 
 /// </summary> 
 /// <param name="SQL">用于将Sql转化为MD5字符串</param> 
 /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> 
 /// <param name="CacheTime">缓存时间</param> 
 /// <param name="DBName">使用的数据库的链接字符串</param> 
 /// <returns></returns> 
 public static DataSet CacheFileByDataSet(string SQL, string CacheFilePath, int CacheTime) 
 { 
 SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper(); 
 if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/")) 
 { 
 CacheFilePath = CacheFilePath.Remove(0, 1); 
 } 
 
 string SqlMd5 = SQL;//用于将Sql转化为MD5字符串 
 
 string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(SqlMd5, "MD5");//生成的Md5文件名 
 
 string MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径 
 
 int MyCacheTime = CacheTime;//缓存时间(分) 
 
 DataSet ds = new DataSet();//存放数据记录的DataSet 
 
 DataSet CacheDs = new DataSet();//获取缓存数据记录的DataSet 
 
 //尝试获取缓存数据记录 
 try 
 { 
 CacheDs = DataTableCache.GetDSCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5); 
 } 
 catch 
 { 
 CacheDs = null; 
 } 
 if (CacheDs != null)//获取到缓存的XML文件 
 { 
 ds = CacheDs; 
 } 
 else//未获取到缓存的XML文件 
 { 
 //生成DataSet 
 //ds = Query.ProcessMultiSql(SqlMd5, DBName); 
 ds = QuerySql.retDS(SQL); 
 
 //将DataSet存为XML文件 
 try 
 { 
 DataTableCache.SetDSCache(MyCacheFilePath, StrSqlByMd5, ds); 
 } 
 catch 
 { } 
 } 
 return ds; 
 } 
 
 #endregion 
 
 #region 获取/生成缓存文件方法(有cmdParams) 
 /// <summary> 
 /// 获取/生成缓存文件方法(DataTable) 
 /// </summary> 
 /// <param name="SQL">用于将Sql转化为MD5字符串</param> 
 /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> 
 /// <param name="CacheTime">缓存时间</param> 
 /// <param name="DataUsed">使用的数据库的链接字符串</param> 
 /// <param name="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param> 
 /// <returns></returns> 
 public static DataTable CacheFileByDataTable(string SQL, string CacheFilePath, int CacheTime, string DBConstr, params SqlParameter[] cmdParams) 
 { 
 SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper(); 
 if (CacheFilePath != string.Empty && CacheFilePath.StartsWith("/")) 
 { 
 CacheFilePath = CacheFilePath.Remove(0, 1); 
 } 
 
 string SqlMd5 = SQL;//用于将Sql转化为MD5字符串 
 
 string sqlmd5params = SQL; 
 if (cmdParams != null) 
 { 
 for (int i = 0; i < cmdParams.Length; i++) 
 { 
 if (cmdParams[i].Value != null) 
 sqlmd5params += cmdParams[i].Value.ToString(); 
 } 
 } 
 
 string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params, "MD5");//生成的Md5文件名 
 
 string MyCacheFilePath = ""; 
 
 if (CacheTime >= 10000)//如果大于20天的话系统默认为持久 
 { 
 MyCacheFilePath = XmlCache.CacheFolderNameP + CacheFilePath;//用于存放Xml文件的相对路径 
 } 
 else 
 { 
 MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径 
 } 
 
 int MyCacheTime = CacheTime;//缓存时间(分) 
 
 DataTable dt = new DataTable();//存放数据记录的DataTable 
 
 DataTable CacheDt = new DataTable();//获取缓存数据记录的DataTable 
 
 
 //尝试获取缓存数据记录 
 CacheDt = DataTableCache.GetDTCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5); 
 
 if (CacheDt != null)//获取到缓存的XML文件 
 { 
 dt = CacheDt; 
 } 
 else//未获取到缓存的XML文件 
 { 
 //生成DataTable(如果用Query查询请用Query.ProcessSql方法) 
 //dt = Query.ProcessSql(SqlMd5, DataUsed); 
 dt = QuerySql.retDT(SqlMd5); 
 DataTable dt1 = new DataTable(); 
 if (dt != null) 
 { 
 dt1 = dt.Copy(); 
 } 
 //将DataTable存为XML文件 
 DataTableCache.SetDTCache(MyCacheFilePath, StrSqlByMd5, dt1); 
 } 
 return dt; 
 } 
 
 
 /// <summary> 
 /// 获取/生成缓存文件方法(DataSet) Add By wjf 
 /// </summary> 
 /// <param name="SQL">用于将Sql转化为MD5字符串</param> 
 /// <param name="CacheFilePath">存放Xml文件的相对路径(根目录已预置)</param> 
 /// <param name="CacheTime">缓存时间</param> 
 /// <param name="DBName">使用的数据库的链接字符串</param> 
 /// <param name="cmdParams">以数组形式提供SqlCommand命令中用到的参数列表</param> 
 /// <returns></returns> 
 public static DataSet CacheFileByDataSet(string SQL, string CacheFilePath, int CacheTime, string DBConstr, params SqlParameter[] cmdParams) 
 { 
 SQLHelper.SQLHelper QuerySql = new SQLHelper.SQLHelper(); 
 string SqlMd5 = SQL;//用于将Sql转化为MD5字符串 
 
 string sqlmd5params = SQL; 
 if (cmdParams != null) 
 { 
 for (int i = 0; i < cmdParams.Length; i++) 
 { 
 if (cmdParams[i].Value != null) 
 sqlmd5params += cmdParams[i].Value.ToString(); 
 } 
 } 
 
 string StrSqlByMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sqlmd5params, "MD5");//生成的Md5文件名 
 
 string MyCacheFilePath = XmlCache.CacheFolderName + CacheFilePath;//用于存放Xml文件的相对路径 
 
 int MyCacheTime = CacheTime;//缓存时间(分) 
 
 DataSet ds = new DataSet();//存放数据记录的DataSet 
 
 DataSet CacheDs = new DataSet();//获取缓存数据记录的DataSet 
 
 //尝试获取缓存数据记录 
 CacheDs = DataTableCache.GetDSCache(MyCacheTime, MyCacheFilePath, StrSqlByMd5); 
 
 if (CacheDs != null)//获取到缓存的XML文件 
 { 
 ds = CacheDs; 
 } 
 else//未获取到缓存的XML文件 
 { 
 //生成DataSet 
 //ds = Query.ProcessMultiSql(SqlMd5, DBName); 
 ds = QuerySql.retDS(SqlMd5); 
 DataSet ds1 = new DataSet(); 
 if (ds != null) 
 { 
 ds1 = ds.Copy(); 
 } 
 //将DataSet存为XML文件 
 DataTableCache.SetDSCache(MyCacheFilePath, StrSqlByMd5, ds1); 
 } 
 return ds; 
 } 
 #endregion 
 
 #region 非持久保持 
 /// <summary> 
 /// 非持久保持 
 /// </summary> 
 public static string CacheFolderName 
 { 
 get 
 { 
 if (m_CacheFolderName == null)//如果Global.asax中未定义路径 
 { 
 m_CacheFolderName = System.Configuration.ConfigurationManager.AppSettings.GetValues("CachePathRoot")[0]; 
 if (m_CacheFolderName == null)//如果Web.Config中未定义路径 
 { 
 return "/CacheData/" + DateTime.Now.ToString("yyyyMMdd") + "/"; 
 } 
 else 
 { 
 return m_CacheFolderName + DateTime.Now.ToString("yyyyMMdd") + "/"; 
 } 
 } 
 else 
 { 
 return m_CacheFolderName + DateTime.Now.ToString("yyyyMMdd") + "/"; 
 } 
 } 
 
 set 
 { 
 m_CacheFolderName = value; 
 } 
 } 
 #endregion 
 
 #region 持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等) 
 /// <summary> 
 /// 持久保存(例如存放MapBar缓存的数据或需要3个月以上更新的数据等) 
 /// </summary> 
 public static string CacheFolderNameP 
 { 
 get 
 { 
 if (m_CacheFolderName == null)//如果Global.asax中未定义路径 
 { 
 m_CacheFolderName = System.Configuration.ConfigurationManager.AppSettings.GetValues("CachePathRoot")[0]; 
 if (m_CacheFolderName == null)//如果Web.Config中未定义路径 
 { 
 return "/CacheData/"; 
 } 
 else 
 { 
 return m_CacheFolderName; 
 } 
 } 
 else 
 { 
 return m_CacheFolderName; 
 } 
 } 
 
 set 
 { 
 m_CacheFolderName = value; 
 } 
 } 
 #endregion 
 } 
 #endregion 

4、DATATABLE缓存

热心网友 时间:2022-05-19 12:12

1、分布式缓存Memcached

2、内存缓存,此占用服务器资源
3、XML缓存,这种最为常见

4、DATATABLE缓存
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 ASP.net的整页缓存,页面部分缓存,应用程序缓存各自的优缺点是什么? asp.net 服务器缓存技术 青少年长身高在什么年龄段 一岁宝宝辅食面条的家常做法大全怎么做好 宝宝辅食鲜虾面的做法步骤图,怎么做好吃 宝宝辅食之鲜虾面的做法步骤图,怎么做好吃 宝宝虾面的做法步骤图,宝宝虾面怎么做好吃 宝宝辅食鲜虾面怎么做 宝宝虾面条的简单的做法 宝宝辅食 鲜虾面怎么做 婴儿辅食虾面条的做法都有哪些 炸鸡(超简单)怎么做 梨 从食疗的角度讲,有什么功效? 蜂蜜水和梨罐头水能反作用吗 梨罐头要蒸多久能好 直接加热冰糖雪梨罐头可止咳吗 自制冰糖梨罐头的做法 吃梨有消火通便功效,那吃雪梨罐头也一样有这功效吗? 糖水梨罐头怎么做 糖水梨罐头有什么功效 家常自制梨罐头的做法 虾粉的做法婴儿辅食 关于ASP.NET中的缓存问题的几种方式 青少年怎样长高 asp.net页面缓存 几月份是青少年长个最快时期? 九个月宝宝西红柿虾面辅食怎么做 asp.net缓存问题 十个月婴儿辅食虾的做法 asp.net缓存要注意些什么? 青少年想要长高应该怎么做? asp.net MVC的缓存问题 ASP.Net MVC 缓存数据,以及缓存数据使用问题 ASP.NET 数据缓存有什么用 应该怎么用 asp.net什么情况使用缓存 青少年健康饮食的四大原则 ASP.NET几种清除页面缓存的方法 用搜狗输入法怎么打出来心形符号? asp.net 三层架构缓存问题 asp.net aspx文件 缓存设定问题