缓存DAL返回对象?

时间:2011-12-01 16:31:05

标签: c# caching sql-server-express data-access-layer

我想知道我是否应该以某种方式缓存从DAL返回的对象?我可能有多个UI控件在页面的单个加载中调用相同的数据。

你们会推荐什么?我开始有点谨慎吗?它不是一个可怕的数据量。但如果我应该以某种方式缓存,那么推荐的方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以cache如果您在同一页面上确实有多个控件使用相同的数据,您可以在父页面中调用一次数据并将引用传递给每个控件,并在每个控件中使用Setter (而不是让每个控件从DAL本身拉出相同的数据),例如:

myControl.AllUsers = _allUsers;
....
myOtherControl.AllUsers = _allUsers;

我也同意@DanielHilgarth。缓存增加了复杂性(例如,何时刷新缓存)。如果页面加载速度很快,我不会打扰。

如果页面很慢,循环中的数据库调用往往是我的经验的罪魁祸首。

答案 1 :(得分:0)

这取决于它是否安全且必须这样做。如果您正在使用的数据不需要实时数据(即您的博客),那么无论如何您都认为这样做是必要的缓存(意味着您的网站运行缓慢)。

很多时候人们忘记考虑的缓存问题是,如果需要立即响应(例如禁止用户或更新支付网关信息),可以按需清除缓存。

缓存有两种主要类型,即滑动缓存和固定时间缓存。

滑动缓存(每次执行有效检索时都会扩展的缓存)非常适合具有相对容易计算值的资源,但可能会受到数据库/网络开销的影响。在滑动缓存上缓存1小时(或w / ever),然后每当DAO发生INSERT / UPDATE / DELETE时手动使缓存无效(删除)。通过这种方式,用户将看到实时结果,但只要有可能就会进行缓存。

固定时间缓存非常适合难以执行的资源(即非常复杂的存储过程),并且不需要实时准确性。第一次请求时,缓存1小时(或w / ever),并且在第一个小时结束之前不要清除缓存。缓存机制会忽略INSERT / UPDATE / DELETE(除非它绝对是不必要的)。

答案 2 :(得分:0)

为此,您可以查看此库:

http://www.reactiveui.net/

它提供了一种干净的方式来缓存对象。

我会说这是一种非常巧妙的方式。