C# 有关如何记录同步过程的示例

C# 有关如何记录同步过程的示例,c#,microsoft-sync-framework,C#,Microsoft Sync Framework,我已经实现了一个同步,效果很好。由于同步时间相当长,我想创建一个显示同步进度的ProgressBar。我看过一些同步事件,比如ApplyingChanges 然而,我并没有像我期望的那样得到它们,文档也没有给我太多帮助 有没有人链接到一些关于同步日志如何工作的好例子?我会非常感激的 (我正在使用同步框架2.1) 例如,ApplyingChanges和ChangesApplied事件之间没有任何事件吗?很遗憾,我不能显示代码,因为我不再为使用Microsoft Sync Framework 2.1

我已经实现了一个同步,效果很好。由于同步时间相当长,我想创建一个显示同步进度的
ProgressBar
。我看过一些同步事件,比如
ApplyingChanges

然而,我并没有像我期望的那样得到它们,文档也没有给我太多帮助

有没有人链接到一些关于同步日志如何工作的好例子?我会非常感激的

(我正在使用同步框架2.1)


例如,
ApplyingChanges
ChangesApplied
事件之间没有任何事件吗?

很遗憾,我不能显示代码,因为我不再为使用Microsoft Sync Framework 2.1的项目工作了。希望这个解释能让你朝着正确的方向前进一步

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

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

请注意,双向同步意味着两个同步会话。建议计算每个会话的进度。因此,在双向同步的情况下,一旦一个会话完成,您将获得50%的收益

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


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

哪个版本的Microsoft Sync Framework?以前没有听说过
SessionProgress
,尝试过,在同步过程中发生了两次。第一次50/100,第二次100/100。。。然而,我确实知道提供者事件,但正如我在上一次编辑中所说的,大多数同步时间都花在客户端的应用更改和应用更改之间,在那里我似乎没有得到其他事件……这是真的。会议进度不准确。会话进度取决于您有多少个会话。1个会话:(单向同步)将为0-100%。如果您正在双向同步。50%表示第一个会话结束,第二个会话开始。所以一点也不准确,我记不起应用更改和应用更改之间的区别。我在进度条中使用的大多数信息都来自同步提供程序的SyncProgress。我们还使用统计数据来预测同步过程两个阶段之间的持续时间。开始会话->确定更改->发送更改->应用更改->完成会话