【问题标题】:Examples on how to log the sync procedure有关如何记录同步过程的示例
【发布时间】:2015-03-13 15:08:26
【问题描述】:

我已经实现了同步,它工作正常。由于同步相当长(及时),我想创建一个 ProgressBar 来显示同步的进度。我查看了一些同步事件,例如ApplyingChanges

但是,我并没有像我预期的那样得到它们,文档也没有给我太多帮助。

有没有人提供一些关于同步日志如何工作的好例子的链接?非常感谢。

(我使用的是 Sync 框架 2.1)

例如,ApplyingChangesChangesApplied 事件之间是否没有任何事件?

【问题讨论】:

  • 哪个版本的 Microsoft Sync Framework?

标签: c# microsoft-sync-framework


【解决方案1】:

很遗憾,由于我不再为我们使用 Microsoft Sync Framework 2.1 的项目工作,因此我无法显示代码,对此我深表歉意。希望这个解释能让你朝着正确的方向前进。

在 Microsoft Sync Framework 2.1 中,您可以订阅会话进度事件:Microsoft.Synchronization.SyncOrchestrator.SessionProgress。老实说。我没有使用此事件获得可靠的进度条。所以我自己从两个同步提供者那里收集了信息。

我只有DatabaseSyncProvider(继承RelationalSyncProvider)的经验,但希望能帮到你。
RelationalSyncProvider 正在引发一些可以帮助您收集信息的事件: See RelationalSyncProvider

请注意双向同步意味着两个同步会话。建议计算每个会话的进度。因此,在双向同步的情况下,一旦完成一个会话,您就可以使用 50%。

对于更高级的进度条,您需要知道要同步多少条记录。结合从 RelationalSyncProvider 的事件中收集的信息,您可以构建一个非常准确的进度条。为此,您可以构建一种预览,用于计算将在下一次会话期间同步的更改。
为此,您可以使用目标端的SyncKnowledge 和源端数据库的selectchanges 查询。 selectchanges 查询的 where 子句可用于您自己的 countchanges 存储过程。由于您使用与 MS Sync Framework 用于选择更改的相同 where 子句,您将检索将为该会话同步发送的确切记录数量。

我们不仅将这个“countchanges”用于进度条,还用于统计和高级调度。如果你只是为了一个进度条,你需要在性能损失和用户友好的进度条之间做出决定,或者有一个不太可靠的进度条。

【讨论】:

  • 之前没听说过SessionProgress,试了一下,同步的时候出现了两次。第一次在 50 / 100 和第二次 100 / 100 ......但是我确实知道提供程序事件,但正如我在上次编辑中所说,大部分同步时间都花在客户端的 ApplyingChanges 和 ChangesApplied 之间,而我似乎没有其他活动......
  • 确实如此。 SessionProgress 不准确。 SessionProgress 取决于您有多少会话。 1 个会话:(单向同步)将是 0-100%。如果是双向同步。 50% 表示第一个会话结束,从第二个会话开始。所以根本不准确
  • 我不记得 ApplyingChanges 和 ChangesApplied 之间的内容。我在进度条中使用的最多信息来自同步提供程序的 SyncProgress。我们还使用统计数据来预测同步过程的两个阶段之间的持续时间。开始会话 -> 确定更改 -> 发送更改 -> 应用更改 -> 完成会话
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多