奇怪,泛型不能cache缓存吗??

lixiaolong1224 2010-05-20 07:31:24
//infoModel是实体类
List<infoModel> myList = null;

//读取各分类下面资讯
if (Cache["exhiCategroyInfo"] == null)
{
myList = new info().getInfoIndexTopInfo();
if (myList != null)
{
//缓存委托
CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onCategroyInfoRemove);

//缓存时间(秒)
new dbCache().insertCache("exhiCategroyInfo", myList, 3000, callBack);
}
}
else
{
myList = (List<infoModel>)Cache["exhiCategroyInfo"];
}

private void onCategroyInfoRemove(string key, object value, CacheItemRemovedReason reason)
{
//create an instance of the callback delegate
CacheItemRemovedCallback callBack =
new CacheItemRemovedCallback(onCategroyInfoRemove);
new dbCache().insertCache(key, value, 3000, callBack);
}
//insertCache
public void insertCache(string cacheKey, object cacheValue, int cacheTime, CacheItemRemovedCallback callBack)
{
//判断缓存是否存在
if (!checkCacheKeyIsExist(cacheKey))
{
Cache _cache = HttpRuntime.Cache;

_cache.Insert(cacheKey, cacheValue, null, System.DateTime.Now.AddSeconds((double)cacheTime), Cache.NoSlidingExpiration, CacheItemPriority.Default, callBack);
}
else
HttpContext.Current.Response.Write("抱歉,该名称的缓存已存在!");
}

//我调试了,确认数据已经被缓存;当我重新刷新页面,缓存竟然为空,为什么呢??
...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
但问题是缓存字符串又没有问题
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
imfor
===============================================================
我本地调试了,插入缓存成功,然后我立即取出缓存,就取出不了,里面的值为空
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
晕哦,我在本地调试过,保存没有问题,保存后就取出不了,郁闷!!
鸭梨山大帝 2010-05-20
  • 打赏
  • 举报
回复
1.泛型是肯定可以被缓存起来的.

举例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<A> o = null;//new List<A>();

if (HttpRuntime.Cache["MyList"] == null)
{
o = new List<A>();
o.Add(new A() { obj = new object() });
HttpRuntime.Cache.Insert("MyList", o, null, DateTime.Now.AddSeconds(100), System.Web.Caching.Cache.NoSlidingExpiration,);
}
else
{
o = (List<A>)HttpRuntime.Cache["MyList"] ;
}
}
}

public class A
{
public object obj { get; set; }
}
}



2.缓存并不是说你设定了绝对过期时间,在这个过期时间之前就绝对不会回收.在系统内存紧张缓存会被回收失效的.

3._cache.Insert(cacheKey, cacheValue, null, System.DateTime.Now.AddSeconds((double)cacheTime), Cache.NoSlidingExpiration, CacheItemPriority.Default, callBack);

CacheItemPriority:指定 Cache 对象中存储的项的相对优先级。
Default:缓存项优先级的默认值为 Normal。
Normal:在服务器释放系统内存时,具有该优先级级别的缓存项很有可能被从缓存删除,其被删除的可能性仅次于具有 Low 或 BelowNormal 优先级的那些项。这是默认选项。
关于缓存中储存项的相对优先级见MSDN:

http://msdn.microsoft.com/zh-cn/library/system.web.caching.cacheitempriority(VS.80).aspx
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
我看看
皇城龙三 2010-05-20
  • 打赏
  • 举报
回复
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
wuyq11
==============================
改成System.Web.Caching.CacheItemPriority.High,也不行啊!!
wuyq11 2010-05-20
  • 打赏
  • 举报
回复
System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache
public virtual void AddObjectWith(string objId, object o)
{
CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);
webCache.Insert(objId, o, null, System.DateTime.Now.AddSeconds(TimeOut), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, callBack);
}
public void onRemove(string key, object val, CacheItemRemovedReason reason)
{}
imfor 2010-05-20
  • 打赏
  • 举报
回复
肯定是可以的,缓存存入的事object,仔细看看代码,断点调试一下看缓存在哪消失了。
lixiaolong1224 2010-05-20
  • 打赏
  • 举报
回复
奇怪,我cache一个字符串,却没有问题,晕死??
frankbooth 2010-05-20
  • 打赏
  • 举报
回复
友情帮顶……

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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