代码之家  ›  专栏  ›  技术社区  ›  Burt

优化智能客户端性能

  •  1
  • Burt  · 技术社区  · 14 年前

    我有一个智能客户端(WPF),可以调用服务器VA服务(WCF)。我正在处理的屏幕包含调用构造函数时加载的对象列表。我可以添加、编辑和删除列表中的记录。

    通常,我所做的是在每次添加或删除之后,我都会再次从服务中重新加载整个模型,这其中有很多原因,包括在调用之间服务器上的数据可能发生了更改。

    事实证明,这种方法对性能有很大影响,因为我加载的所有内容都在添加和编辑时向上和向下发送列表。

    还有哪些其他选项对我开放,我应该只向服务器发送所需的信息,以及在执行添加或删除操作时如何不再重新加载所有数据?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Robert Rossney    14 年前

    执行您所描述的操作的最佳方法(我假设您已经知道客户机/服务器I/O是瓶颈)是,一旦客户机被填充,只在两个方向发送更改。

    如果您采用了日志模型来更新数据,那么这很简单。为了让任何进程对共享数据进行更改,它必须创建一个时间戳事务,并将其添加到日志中。对数据进行更新的方法是将事务应用于数据。

    一旦您的数据模型支持事务日志,您就有了一个简单的方法来保持客户机和服务器与最小的网络流量同步:要更新客户机,服务器将发送自上次更新客户机以来创建的所有日志条目。

    对现有设计进行改造可能需要大量的工作。在你走这条路之前,你要确保你要解决的问题实际上就是你所遇到的问题。

        2
  •  -1
  •   Jay    14 年前
    1. 确保这个功能被很好地封装,这样您就可以在不接触其他组件的情况下使用它。
    2. 将您的源代码置于版本控制之下,并经常签入。
    3. 我强烈建议在重构之前使用一套自动化单元测试来验证所有东西是否都按预期工作,并在执行每个更改时继续工作。
    4. 如果性能受到影响的是服务器上的客户机数据传输,而不是服务器上的查询、处理和磁盘IO,则可以考虑设计给定对象集合或图形的哈希,并将哈希传递给服务器上的服务方法,该方法将从数据库中查询和计算哈希,比较哈希,然后重新计算氡 true false . 只有 然后你能重新加载数据吗?如果更改不太可能或不经常发生,这是有效的,因为更改后需要两次调用才能获取数据。如果数据库中的更改是一个问题,那么您可能不希望仅在用户修改或添加某些内容时获取更改——例如,这可能是一个完全独立的基于计时器的操作。并发策略实际上取决于您的数据、用户数量、多个用户同时有兴趣更改相同数据的可能性等。