3

我想知道我对以下情况的选择:

我有一个 C# winforms 应用程序(在 VS 2010 中开发)分发到国内的多个办事处。该应用程序与位于单独位置的主服务器上的 C# Web 服务进行通信,并且在另一个位置有一个数据库 (SQL Server 2012)。(所有服务器运行 Windows Server 2008)

总部(我们所在的地方)使用相同的前端来管理数据库中的某些信息,这些信息需要随时可供所有办公室实时使用。同时,他们更改的任何数据都需要在总部随时提供给我们,因为我们有一个实时仪表板 Web 应用程序来监控站点范围的统计数据。

目前,用户抱怨应用程序的运行速度。他们说这真的很慢。我们在一个关键业务环境中工作,每一分钟的等待都可能意味着失去一个客户。

我研究了以下选项,但不是来自数据库背景,所以不太确定我的方案的最佳路线是什么。

  • 终端服务/会话(我刚刚在总部实施,他们说这是一个很大的改进,尽管有一个可怕的滞后——比如远程处理到某人的桌面上,这不是很好的工作。)
  • 事务复制(在我的场景中听起来似乎很合理,但需要所有办公室在各自的服务器上拥有自己的 SQL 服务器数据库,并且他们倾向于“摆弄”并破坏他们负责的一切!)希望我们可以接管他们所有的服务器,但他们是特许经营权,所以在现场有自己的 IT 人员。)

我目前在应用程序启动时缓存了很多查找数据,但这也需要 2-3 分钟才能完成,这是不可接受的!

有没有人有任何想法?

4

1 回答 1

2

由于一切都通过 Web 服务运行,因此无需在客户端本地部署额外的 SQL Server。除非 WS 也部署在本地,否则 WS 将无法与这些数据库通信。

在提出任何具体改进建议之前,您需要对瓶颈发生的位置进行基准测试。各种客户端和 Web 服务之间的延迟是多少,然后来自 Web 服务和数据库的延迟是多少?数据库是否显示任何等待?一旦你知道最坏的情况,改进它,然后按照自己的方式工作。

不过,一些一般的想法:

  • 将 WS 移近数据库
  • 在 Web 服务级别缓存数据以节省数据库调用
  • 查找开销 WS 调用,并尝试优化吞吐量
  • 如果查找数据不经常更改,请使用 SQL CE 的本地副本来缓存该数据,并使用 MS Sync Framework 使数据与 SQL Server 保持同步
  • 对客户端计算机上的所有内容使用 SQL CE,并使用后台进程在客户端和 WS 之间进行同步

更新在您发表评论后,还有两个想法。如果您的 Web 服务负载很大,您可以尝试在 Web 服务上添加压缩(如果尚未实现)。

您还可以更新您的客户端以异步执行 WS 调用,无论是在线程中,还是在使用 .NET 4.5 时使用 async/await。这至少允许客户端使用 UI,但不需要解决数据加载时间的任何问题。

于 2013-01-30T10:19:54.997 回答