Microsoft Sync for Ado.Net - 效率,如何改进?

时间:2012-09-13 16:47:16

标签: synchronization compact-framework microsoft-sync-framework

今天我终于设法运行客户端(windows mobile device) - wcf - sql server 2008同步(经过很多问题,主要是MS部分)

我做了测试。对于24 000条记录,快照的平均时间大约需要1分20秒。这是我下载Microsoft Sync for ADO.NET修复程序后的时间。

我还发现,50秒后数据库文件最终开始增长,大约需要25秒。

前50秒的框架是做什么的?加载和序列化数据?

在某些页面上,我发现了有关代理序列化的文章,该文章可以减少传输的数据量。

您知道同步过程是否可能从中受益? (我的意思是修复后的Ado.net的MS Sync?)

我有什么办法可以加快这个过程吗?在我看来,24:24为24000是两倍太多......

3 个答案:

答案 0 :(得分:1)

设备的同步框架存在两个主要问题:

  1. 它通过ADO.NET数据集交换数据
  2. 客户端需要花费大量开销来设置客户端数据库,以便在“初始”同步时获得同步支持。
  3. SQL CE在插入时非常慢。
  4. 你提到的热门修补程序尽可能地解决#3问题,因此你无法做到这一点。

    2号是同步框架的一部分,我担心没有什么可以做的。

    对于#1,这是50秒(大概30左右?)的大部分时间:当客户端收到数据集时,它必须反序列化整个流(流包含极其冗长的流) XML)在处理之前就可以开始了。对于大型数据集(10,000多行),这可能需要很长时间,并且一旦可用堆内存最大化,就可以(并且最终)甚至会导致Memory Crunch场景。

    您引用的序列化代理方法将大大减少交换响应流的大小(在我的测试中,在某些情况下,它几乎减少了90%)。这肯定会在一定程度上改善响应时间,尤其是在网络连接吞吐量有限时。但是,在一天结束时,您无法解决在客户端处理开始之前必须将该流反序列化为DataSet的事实。

    所有这一切:是的,代理序列化方法将减少传输的数据量,并且您可能会实现一些改进,但多少将取决于以下因素:

    • 数据集的大小
    • 可用设备内存量
    • 设备处理器速度和可用性

    希望这有帮助!

答案 1 :(得分:1)

同步时会发生三件事: 1.它需要枚举已经发生的变化

  1. 需要将其发送到目的地

  2. 需要应用它

  3. 对于枚举,数据库的大小将产生很大的影响。即使没有任何变化,您也会对此检查产生一些性能损失。

    请参阅:Synchronization Services for ADO .NET for Devices: Improving performance by skipping tables that don’t need synchronization

    对于项目#2,数据集序列化是瓶颈。您可以选择使用数据集代理甚至压缩,但是您会遇到代理并进行压缩,您可能看不到大量的性能改进。

    请参阅:Sync Framework WCF-based Synchronization for Offline scenario – Using custom dataset serialization

    对于第1项和第2项,您可以对数据库应用相同的性能调整,例如仅通过过滤,调整索引等同步所需的行...

    毕竟,Sync Fx应用程序就像任何其他数据库应用程序一样。

答案 2 :(得分:0)

如果您使用的是SyncFx 2.1库(SynchOrchestrator而不是SyncAgent),则SyncFx已经在使用DataSet Surrogate序列化 - 它是内置的。

为了避免与DataSet相关的内存不足问题,您可以查看批处理以找到限制每次同步可以发送的记录数的方法。它可以在某种程度上使用任何一组SyncFx库来完成,但对于2.1库而言比1.0库更具确定性。

  

*确定的:   2.1库允许您指定最大字节数,   SyncFx会在最后一个适合其内部的完整行中自动切断   限制。我认为,使用1.0库是唯一的方法   批处理是指定最大行数,并希望(或仔细计算)该数据   不超过你想达到的限制。

相关问题