标签: objectcache

.NET 4 ObjectCache - 我们可以陷入"缓存过期"事件吗?

我有一个像这样缓存的简单对象:

_myCache.Add(someKey, someObj, policy);
Run Code Online (Sandbox Code Playgroud)

在哪里_myCache声明为ObjectCache(但通过DI注入MemoryCache.Default),someObj是我正在添加的对象,并且policyCacheItemPolicy.

如果我有CacheItemPolicy这样的:

var policy = new CacheItemPolicy 
{ 
   Priority = CacheItemPriority.Default, 
   SlidingExpiration = TimeSpan.FromHours(1)
};
Run Code Online (Sandbox Code Playgroud)

这意味着它将在1小时后到期.凉.

但会发生的事情是,一小时后不幸的第一个用户将不得不等待命中.

有什么方法可以挂钩到"过期"事件/委托并手动刷新缓存?

我看到有一个提到,CacheEntryChangeMonitor但在我的例子中找不到任何有意义的doco /例子如何利用它.

PS.我知道我可以CacheItemPriority.NotRemovable手动使用和过期,但我不能在我当前的例子中这样做,因为缓存的数据有点太复杂(例如,我需要在我的代码中的10个不同位置"无效").

有任何想法吗?

c# caching .net-4.0 objectcache

16
推荐指数
2
解决办法
9873
查看次数

.net Windows应用程序中的ObjectCache

ObjectNetBache类是否包含在.Net Framework 3.5中?

如果没有,是否有一种替代方法可以在缓存中存储对象(在Windows应用程序中不是asp.net)?

有没有人有任何在线资源或代码片段,演示如何使用ObjectCache类?

.net c# windows-applications objectcache

7
推荐指数
1
解决办法
1693
查看次数

实体框架6和ObjectCache:保存问题

我正在使用Entity Framework 6和ObjectCache来缓存一些不经常更改的实体.但是我在尝试保存缓存的实体时遇到了错误,因为它们是从不同的上下文中检索的.在保存之前,我验证了并且对象的状态已经分离但是在我执行此操作之前无法消除该错误:

public void Save(Product obj)
{
    var objInDb = dbContext.Products.Find(obj.Id);

    if (objInDb == null)
    {
        dbContext.Products.Add(obj);
        dbContext.SaveChanges();
    }
    else
    {
        dbContext.Entry(objInDb).CurrentValues.SetValues(obj);
        dbContext.Entry(objInDb).State = EntityState.Modified;
        dbContext.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

在实现所描述的解决方案之后修复的原始错误:附加类型为"C"的实体失败,因为相同类型的另一个实体已经具有相同的主键值.如果图中的任何实体具有冲突的键值,则在使用"附加"方法或将实体的状态设置为"未更改"或"已修改"时,可能会发生这种情况.这可能是因为某些实体是新的并且尚未收到数据库生成的键值.在这种情况下,使用"添加"方法或"已添加"实体状态来跟踪图形,然后根据需要将非新实体的状态设置为"未更改"或"已修改".

原始代码是:

if (obj.Id == 0)
{
    context.Products.Add(obj);
}
else
{
    context.Entry(obj).State = EntityState.Modified;
}

context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个?我真的不喜欢绕过我的缓存并点击数据库来获取对象,因为它对我来说没什么用.

caching entity-framework objectcache

6
推荐指数
1
解决办法
115
查看次数

在.NET中,为什么ObjectCache比MemoryCache是​​首选类型?

所以 很多 的例子使用.NET中的内存缓存(的包括官方文档)与实例吧:

private readonly ObjectCache memoryCache = MemoryCache.Default;
Run Code Online (Sandbox Code Playgroud)

有什么理由要优先于此:

private readonly MemoryCache memoryCache = MemoryCache.Default;
Run Code Online (Sandbox Code Playgroud)

.net c# objectcache memorycache

1
推荐指数
2
解决办法
218
查看次数