c# 如何操作application 缓存

gul_gui 2010-03-29 11:14:49
现在有个项目 经理要求把一些数据 存入到Application 缓存里面 方便取用 提高效率
但是我 以前完全没有接触过关于 缓存的操作。
需求是 从数据库 得到一个 datatable 类型的数据 然后存入缓存 在其他页面调用
请各位大虾帮帮忙哈 最好有点代码~

...全文
582 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
criedshy 2010-03-29
  • 打赏
  • 举报
回复
public class CacheClass
{
/// <summary>
/// 获取当前应用程序指定CacheKey的Cache值
/// </summary>
/// <param name="CacheKey"></param>
/// <returns></returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}

/// <summary>
/// 设置当前应用程序指定CacheKey的Cache值
/// </summary>
/// <param name="CacheKey"></param>
/// <param name="objObject"></param>
public static void SetCache(string CacheKey, object objObject)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(CacheKey, objObject);
}

/// <summary>
/// 设置当前应用程序指定CacheKey的Cache值
/// </summary>
/// <param name="CacheKey"></param>
/// <param name="objObject"></param>
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);
}
/// <summary>
/// 清除单一键缓存
/// </summary>
/// <param name="key"></param>
public static void RemoveOneCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Remove(CacheKey);
}
/// <summary>
/// 清除所有缓存
/// </summary>
public static void RemoveAllCache()
{
System.Web.Caching.Cache _cache = HttpRuntime.Cache;
IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
if (_cache.Count > 0)
{
ArrayList al = new ArrayList();
while (CacheEnum.MoveNext())
{
al.Add(CacheEnum.Key);
}
foreach (string key in al)
{
_cache.Remove(key);
}
}
}
/// <summary>
/// 以列表形式返回已存在的所有缓存
/// </summary>
/// <returns></returns>
public static ArrayList ShowAllCache()
{
ArrayList al = new ArrayList();
System.Web.Caching.Cache _cache = HttpRuntime.Cache;
if (_cache.Count > 0)
{
IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
al.Add(CacheEnum.Key);
}
}
return al;
}
}

2 调用

public DataSet GetDataSetByTypeid(string typeid)
{
string CacheKey = "KeyName-" + typeid;
DataSet objModel = (DataSet)DataCache.GetCache(CacheKey);
if (objModel == null)
{
try
{
objModel = ipro.GetDataSetByTypeid(typeid);//取得对象操作,根据自已的需求随意改
if (objModel != null)
{
int intCache = 30;//缓存时间,
//绝对期限
DataCache.SetCache(CacheKey, objModel, DateTime.Now.AddMinutes(intCache), TimeSpan.Zero);
//可调整期限 最后一次访问所插入对象时与该对象到期时之间的时间间隔。
//DataCache.SetCache(CacheKey, objModel, DateTime.MaxValue, TimeSpan.FromMinutes(3));
}
}
catch
{ }
}
return objModel;
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/crazykiller/archive/2009/09/16/4557317.aspx

criedshy 2010-03-29
  • 打赏
  • 举报
回复
C#缓存操作方法
缓存
缓存机制
页输出缓存:保存页处理输出,下次重用所保存的输出
应用程序缓存:允许缓存所生成的数据,如DataSet

㈠页输出缓存

1、页输出缓存的几中形式
①<%@ OutputCache Duration="60" VaryByParam="None" Location="Any"%>
Location指定在哪个地方缓存,Any任何地方都缓存。
60秒以内看到的都是一样的了。
②还可在配置文件里写,然后在页面调用配置文件的缓存名称。
③用编程的方式:
Response.Canche.SetExpires(DateTime.Now.AddSeconds(3));
Response.Canche.SetCacheabiliy(HttpCacheability.Public);
Response.Canche.SetValidUntilExpires(true);
相当于:
Public => Any
Private => Client
NoCache => None
Server => Server
ServerAndPrivate =>ServerAndClient

2、使用文件依赖项缓存页输出
产生背景:有时候,可能需要在文件发生更改时从输出缓存中移除某一项。就是说文件改了以后缓存立即失效。
string filepath = Server.MapPath("TextFile1.txt");
Response.AddFileDependency(filepath);//添加缓存依赖项
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntiExpires(true);

3、缓存多个版本
①使用请求的浏览器对页的各个版本进行缓存
<%@OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser"%>
②使用参数对页的各个版本进行缓存
<%@OutputCache Duration="60" VaryByParam="City"%>
这个调试可以在url后加QueryString
如:...url?City=shanghai
程序里得到这个上海然后再做其他的操作,这个时候如果参数传的还是shanghai它就不会在走到程序里了。

4、动态更新缓存页的部分,有三种方法可以实现部分不缓存
①已声明方式使用Substitution控件
<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDateTime" />
public static string GetCurrentDateTime(HttpContext context)
{
return DateTime.Now.ToString();
}
//方法签名必须和委托签名一致
②以编程的方式使用Substitution控件API
Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetCurrentDateTime))
③以隐式方式使用AdRotator控件
这个控件永远都是不缓存的

㈡SQL Server依赖的缓存,非常之有用
当表数据发生改变就清除缓存

1、为SQL Server启用缓存通知
aspnet_regsql.exe -S <Server> -U <Username> -P <Password>
-ed -d Northwind -et -t Employees
Server:服务器
Username:用户名
Password:密码
Northwind:数据库
Employees:表
2、为缓存功能配置网页
<%@OutputCache Duration="3600" SqlDependency="Northind:Employees" VaryByParam="none"%>
3、在Web.config文件中设置缓存配置
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<database>
<add name="Northind" connecti pollTime = "1000" />
</database>
</sqlCacheDependency>
</caching>
//这里的name要是数据库名称
  • 打赏
  • 举报
回复
什么叫做缓存?它至少可以当你内存不够时自动释放一些数据吧。你使用Aplication那叫做独占,不叫做缓存。只有Page.Cache(其实是HttpRuntime.Cache)才是缓存。
tashiwoweiyi 2010-03-29
  • 打赏
  • 举报
回复
Application ,Session ,Cookie
我喜欢用Session
happyboyxq 2010-03-29
  • 打赏
  • 举报
回复
缓存网上很多的。
liuyileneal 2010-03-29
  • 打赏
  • 举报
回复
楼主去看一下数据绑定控件的缓存吧,例如sqlDataSource带有缓存功能,并提供定时刷新,还可以设置缓存的失效时间

<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
EnableCaching="True"
CacheDuration="20"//每20秒刷新一次
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
</asp:SqlDataSource>

<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataSourceID="SqlDataSource1">
<columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</columns>
</asp:GridView>


liuh6 2010-03-29
  • 打赏
  • 举报
回复
这个跟SEssion 的用法差不多.不过很占服务器资源.用时慎重.
gul_gui 2010-03-29
  • 打赏
  • 举报
回复
顶一下
加油馒头 2010-03-29
  • 打赏
  • 举报
回复
用封装的cacahe吧

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧