首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Web.Caching.Cache行为

System.Web.Caching.Cache行为
EN

Stack Overflow用户
提问于 2017-07-27 22:03:47
回答 2查看 654关注 0票数 1

我的web应用程序正在缓存对象列表,以避免一次又一次地从数据库中获取对象。在一个页面上,从缓存中获取列表,然后添加到列表中并显示在数据绑定控件中的其他对象。这些附加的对象不是用来缓存的,但仍然是缓存的对象。

当您使用Cache.Get()方法时,它应该返回对象引用还是该对象的副本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-27 22:20:17

System.Web.Caching.Cache是内存中的缓存.这意味着对象引用是从Cache.Get()调用返回的。在完成get之后修改引用时,您正在修改仍然在缓存中的相同对象。

您需要手动执行克隆操作才能不修改原始对象。

票数 5
EN

Stack Overflow用户

发布于 2017-07-27 22:19:57

MSDN:缓存应用程序数据

Cache对象没有有关其包含的项的内容的信息。它仅仅是保存了对那些对象的引用()。

如果要修改列表而不更改其缓存的表示形式,只需使用原始列表作为源创建一个新列表:

代码语言:javascript
复制
var fromCache = Cache.Get("MyList") as List<Foo>;
if (fromCache != null)
{
    var listToModify = new List<Foo>(fromCache);
    listToModifyAdd(new Foo { ... });
}

请注意,这只会阻止缓存的列表被修改,对列表中对象的修改仍然会通过连续的Cache.Get()调用来表示。

如果您也想防止这种情况发生,请查看深度克隆对象

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45361758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档