【问题标题】:Data Virtualization and user-concurrency数据虚拟化和用户并发
【发布时间】:2013-04-21 20:09:00
【问题描述】:

有没有人有任何关于如何解决在使用数据虚拟化时在多用户场景中可能出现的许多问题的指针/示例。假设我们正在谈论 WPF 和 DataGrid。实现按需加载的虚拟化集合并不太难。但是,如果没有存储原始查询临时结果的暂存区,我们会遇到并发问题,例如:

  1. 加载新页面可能会获取不正确的数据(并发用户添加和删除一些记录,导致记录总数相同,但这会导致页面获取已显示在网格上方某处的重复条目)
  2. 在滚动和加载新页面时在网格中保留用户选择,在这种情况下,一旦选定的项目从缓存中过期,一旦重新加载,我们就会发现有人删除了它们。我们可以取消选择所有内容并向用户显示消息,但是:/ 此外,如果在靠近列表末尾的某处使用 Shift-click(多选)进行选择,当某些项目“出现”在列表中间时应该做什么在加载一些中间页面(并发用户添加的项目)时。

【问题讨论】:

    标签: c# wpf architecture datagrid data-virtualization


    【解决方案1】:

    请记住,用户屏幕上的任何内容在技术上都不是最新的。在你展示它的那一刻,你就落后于主数据集。

    1) 是的,当然。但是您始终可以跟踪您在网格上显示的第一条记录,并从那里获取您的下一页大小设置。那些被删除的当然会消失。或者,您可以尝试使用 ZeroMQ 或 RabbitMQ 等库并广播数据集更改并实时更新您的数据网格(如果它们当前显示)。显然,它仍然不会完全同步,但你会减少它们不同步的窗口。

    2) 当您选择项目时,您会跟踪它们的主键。我不知道你想对那些已经从主集中删除的内容做什么。但是你总是可以对所有其他人采取行动,对吗?即使它们不再显示,您也可以跟踪 PK。并在加载页面时重新选择它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2018-04-15
      相关资源
      最近更新 更多