【问题标题】:Improving speed in winform application and WCF with Caching使用缓存提高 winform 应用程序和 WCF 的速度
【发布时间】:2011-07-08 09:06:03
【问题描述】:

我们为客户提供关键应用程序。它是一个 clickonce winforms 应用程序,它使用多个与 Oracle 数据库通信的 WCF 服务。 该服务由 Oracle 应用服务器托管,前面有两个 Web 缓存服务器以实现负载平衡。数据库位于另一台单独的机器上。

问题是,应用程序现在的性能很差,我们需要加快速度。我们尝试了许多技术:在分析解释计划时通过添加索引来优化查询、减少来自客户端的服务调用以及分析客户端应用程序的缺陷。

但我真的很想在数据库或 WCF 上设置两个缓存层。数据很关键,并且经常更改,因此有必要在所有请求中获取最新数据。 因此,当数据库中的数据发生变化时,缓存应该立即过期。查询很复杂,最多包含两个 14-15 连接...

如何正确执行此操作以及我应该使用哪些工具/框架?我听说过 memcached.. 这个好用吗?

【问题讨论】:

  • 您是否对应用程序进行了概要分析以找出时间花费在哪里?将复杂性投入到解决方案中,直到您知道最大的收益在哪里可能会适得其反
  • 我有,从数据库中检索数据可能是最大的问题
  • 是否所有数据访问都通过您的服务,或者数据库中的数据是否可以带外更改?
  • 一切都通过这个网络服务

标签: winforms wcf oracle caching memcached


【解决方案1】:

因为您的代码可以查看数据的所有更新,所以您可以拥有一个非常有效的缓存层,因为缓存可以与数据库同时更新。

根据您对绝对缓存一致性的要求,您需要确保所有服务器都看到相同的缓存。您可以采取两种方法:

  1. 拥有一个缓存服务器,它使用类似于 ASP.NET 缓存的东西,应用程序服务器与之通信以获取和更新数据
  2. 使用缓存产品来维护缓存

如果您使用缓存产品,市场上有很多型号:memcached、gemfire、coherence、Windows Server AppFabric Caching 等等

AppFabric 缓存(正式名称为 Velocity 的项目)的优点在于它在 Windows Server 中是免费的,并且对 .NET 非常友好(尽管它比其他一些更新,因此您可能会说不太成熟)

【讨论】:

    【解决方案2】:

    在添加新工具之前,您应该确保正确使用所有可用的 Oracle 缓存。

    有buffer cache、PL/SQL function result cache、client query result cache、sql query result cache、materialized views,绑定变量将有助于缓存查询计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多