加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从DataContext缓存数据

发布时间:2020-12-16 09:35:01 所属栏目:asp.Net 来源:网络整理
导读:我们在Web应用程序中使用 Linq-to-SQL DataContext,该应用程序向应用程序提供只读数据,并且永远不会更新(已设置ObjectTrackingEnabled = false以强制执行此操作. 由于数据永远不会更改(除了偶尔的配置更新),因此使用新的DataContext为每个Web请求从SQL Serve
我们在Web应用程序中使用 Linq-to-SQL DataContext,该应用程序向应用程序提供只读数据,并且永远不会更新(已设置ObjectTrackingEnabled = false以强制执行此操作.

由于数据永远不会更改(除了偶尔的配置更新),因此使用新的DataContext为每个Web请求从SQL Server重新加载它似乎很浪费.

我们尝试在Application对象中缓存DataContext以供所有请求使用,但它产生了很多错误,我们的研究表明这是一个坏主意,DataContext应该在同一工作单元内处理,而不是线程安全等等

因此,由于DataContext是数据访问机制,而不是数据存储,我们需要考虑缓存从中获取的数据,而不是上下文本身.

更愿意使用实体和集合本身来执行此操作,因此代码可以不知道它是处理缓存还是“新鲜”数据.

怎么能安全地完成?

首先,在处理DataContext之前,我需要确保实体和集合已完全加载.有没有办法从数据库中方便地强制满载所有内容?

其次,我很确定存储对实体和集合的引用是一个坏主意,因为它会

(a)当DataContext超出范围或时,导致实体被破坏

(b)防止DataContext超出范围

那么我应该克隆EntitySets并存储它们吗?如果是这样,怎么样?或者这里有什么?

解决方法

这不完全是您的问题的答案,但我建议避免在网站端缓存.
我更愿意专注于优化数据库查询,以便更快,更有效地进行数据检索.

缓存将:

>不可扩展
>需要额外的同步代码,我假设您的数据在数据库中不是完全静态的?
>额外的代码将容易出错
>将快速占用您的Web服务器的内存,您可能最终解决的下一件事是Web服务器上的内存问题
>当您需要对网站进行负载平衡时,将无法正常工作

[编辑]

如果我需要缓存5MB数据,我会使用Cache对象,可能是延迟加载.我会使用一组轻量级集合,例如ReadonlyCollection< T>,Collectino< T>.我可能会使用ReadonlyDictionary< TKey,TValue>也可以在内存中快速搜索.我会使用LINQ-to-Objects来处理集合.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读