【问题标题】:how to use data cache in WCF如何在 WCF 中使用数据缓存
【发布时间】:2013-05-24 04:01:13
【问题描述】:

我的案例是使用 WCF 从 sqlserver 数据库返回数据表。 一些 wcf 方法在高频下使用。所以它会给数据库带来更大的压力。 我们可以在 wcf 中使用缓存,如 http 缓存,设置过期时间。在过期时间,返回缓存的数据表,过期时间,再次从sqlserver中选择数据。 thx,我是第一次使用stackoverflow,我来自中国,对不起我的英语不好。 ps:我的wcf案例使用winform/console作为主机,而不是iis。

【问题讨论】:

  • 尝试使用System.Caching,非常好用。此外,如果您愿意,可以查看一些持久缓存库,例如 escent。

标签: c# sql-server wcf caching


【解决方案1】:

如果您使用的是 .NET 4.0 或更高版本,则可以使用 MemoryCache 类。例如:

ObjectCache cache = MemoryCache.Default;

您可以将DataSet 存储在缓存中,如下所示:

cache["MyDataSet"] = myDataSet; // myDataSet is your DataSet

然后您可以使用以下逻辑来检索DataSet

if (cache["MyDataSet"] != null)
{
    // Get your DataSet from the database
}
else
{
    myDataSet = (DataSet)cache["MyDataSet"];
}

另外,请查看CacheItemPolicy,它允许您为缓存中的给定项目设置驱逐和过期策略。

【讨论】:

  • thx,我后来找到了那个方法,就像你的帖子一样。很难确定哪个 wcf 方法使用缓存,以及其他一些同步问题。如果有任何方法可以检索数据库更改,如果有更改然后再次选择,否则使用缓存,则没有同步问题。希望可以找到一种方法在sqlserver中对表进行哈希处理以查找表是否已更改。
  • 查看SqlChangeMonitor Class,了解一种监控底层 SQL 更改的方法。您可能需要监视表和/或列,而不是 DataSet 本身(类似于 SqlCacheDepdency)。
  • 查看此示例 .NET 4.0 MemoryCache with SqlChangeMonitor 了解一种方法(MSDN 对如何使用它有一点了解)。
  • 在您的第一行代码中,我收到一个编译错误:“无法将类型'System.Runtime.Caching.MemoryCache' 隐式转换为'venuefinder.controls.ObjectCache'”:(
  • @NickG - 什么是venuefinder.controls.ObjectCache?如果您发布问题并提供相关代码/信息,您将获得更多帮助。
【解决方案2】:

这样的东西能满足您的需求吗?这是伪代码,但我认为它明白了这一点。

static DataTable dt;
static DateTime LastPulled;

public static void GetData()
    {
    if(LastPulled==null || DateTime.Now-LastPulled > new TimeSpan(5))
        {
        //Retrieve DataTable from database
        }
     return dt;
    }

另外,请参阅Caching in WCF?

【讨论】:

  • 使用这个可以工作,但是太多余了,有没有一个通用的类可以达到这个目的?
  • 我不知道。如果你需要一个,自己做会很简单。我会使用一个委托,以便您可以为您的类指定要执行的操作以更新数据。
  • 尝试查看msdn.microsoft.com/en-us/library/… 的现有课程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2010-10-29
  • 2011-04-13
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多