将数据库表存储在C#网站应用程序的内存中?

时间:2013-07-12 16:50:45

标签: c# sql-server

我注意到我们的Web应用程序在很长一段时间内查询了一个特定的表。该表相对较小,只使用了大约一百行。

我想知道是否有办法在网站应用程序的内存中每15分钟左右存储一次这样的表,因此系统不必进行这么多查询就能一遍又一遍地获取相同的信息。这可以在许多不同的用户中使用。

该表是Client表,因此用户可以从许多不同的客户端登录。数据非常静态,可能每天更新一次。

更新: SQL分析器显示查询运行了很多,所以这就是我关心的问题。该网站的速度并不明显。我只是觉得这可以帮助它更快。

3 个答案:

答案 0 :(得分:5)

如果表很小且经常查询,那么数据和任何索引都很可能完全在SQL Server的内存中,查询计划被缓存,查询速度非常快。

在进行任何更改之前衡量实际的效果影响。

如果您发现存在性能影响,则可以使用许多缓存策略来减少数据库的访问。有关表的访问模式和信息一致性需求的更多信息,需要推荐一个特定的缓存策略。

你陈述

  

一遍又一遍地获取相同的信息

但也是州

  

每15分钟一次

如果信息确实一遍又一遍,您可以在应用程序启动时将其加载到ASP.Net缓存中一次。如果它可能经常变化,但是对于给定用户来说数据可能有点过时,则可以使用基于时间的缓存过期策略。如果数据只是经常更改,但必须在更改后立即更新,您可以考虑SQL Dependency缓存过期。

有关ASP.Net缓存的更多信息,请参阅

http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.100).aspx

,具体而言

http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx

答案 1 :(得分:0)

我的建议是创建一个WCF Windows服务 - 使用REST可以轻松缓存SQLDataReader(或其他DataReader)并实现TTL指标以一定间隔重新查询。

答案 2 :(得分:0)

嗯,解决方案很少。

  1. 如果你想每15分钟在内存中加载数据,你应该使用一些.net缓存库,例如系统.NET缓存,你可以在其中设置过期策略,等等。
  2. 您可以尝试使用非聚簇索引优化查询

  3. 您可以使用App Fabric缓存或类似的东西

  4. 最后,尝试在sql server server上添加更多内存