今天我终于设法运行了客户端(windows移动设备)- wcf - sql server 2008同步(在经历了许多问题后,主要用于MS部分)
我做了测试。对于24000条记录,快照的平均时间约为1分20秒。这是我下载Microsoft Sync for ADO.NET的修补程序后的时间。
我还发现,在50秒之后,数据库文件终于开始增长,大约需要25秒。
框架在前50秒做了什么?加载和序列化数据?
在某个页面上,我找到了一篇关于代理序列化的文章,它可以减少传输的数据量。
您知道同步过程是否会从中受益吗?(我的意思是在热修复之后用于Ado.net的MS同步?)
我能做些什么来加速这个过程吗?在我看来,24000的1分24秒太多了…
发布于 2012-09-14 01:06:11
设备的同步框架有两个主要问题:
你提到的热修复尽可能地解决#3,所以你在那里没什么可做的了。
第二个是同步框架的一部分,我担心对它无能为力。
至于#1,这是这50秒中的大部分时间(可能是30秒左右?)当客户端接收到dataset时,它必须先反序列化整个流(其中流由极其冗长的XML组成),然后才能开始处理。对于大型数据集(10,000+行),这可能需要很长时间,并且一旦可用堆内存耗尽,甚至可能(并且最终将)导致内存崩溃的情况。
您引用的序列化代理方法将大大减少交换的响应流的大小(在我的测试中,在某些情况下,它几乎小了90% )。这肯定会在一定程度上缩短响应时间,特别是在网络连接吞吐量有限的情况下。但是,在客户端处理开始之前,必须将流反序列化为DataSet,这一事实是无法回避的。
总而言之:是的,代理序列化方法将减少正在传输的数据量,您可能会实现一些改进,但改进程度将取决于以下因素:
可用的device memory
的dataset
希望这能有所帮助!
发布于 2012-09-14 09:41:40
同步时会发生三件事: 1.它需要枚举已发生的更改
对于枚举,数据库的大小会有很大的影响。而且,即使没有任何更改,这种检查也会产生一些性能损失。
请参阅:Synchronization Services for ADO .NET for Devices: Improving performance by skipping tables that don’t need synchronization
对于item #2,数据集序列化是瓶颈。您可能会选择使用数据集代理,甚至是压缩,但在执行代理和压缩时,您可能看不到巨大的性能改进。
请参阅:Sync Framework WCF-based Synchronization for Offline scenario – Using custom dataset serialization
对于第1项和第2项,您可以应用与数据库相同的性能调优,例如通过过滤、调优索引等仅同步所需的行。
毕竟,Sync Fx应用程序就像其他数据库应用程序一样。
发布于 2012-09-14 02:56:27
如果你使用的是SyncFx 2.1库(SynchOrchestrator而不是SyncAgent),那么SyncFx已经在使用DataSet代理序列化了--它是内置的。
为了避免与数据集相关的内存不足问题,您可以查看批处理,以找到限制每次同步可以发送的记录数的方法。这在某种程度上可以使用任何一组SyncFx库来完成,但是使用2.1库比使用1.0库更具确定性。
*确定性: 2.1库允许您指定最大字节数,SyncFx将在符合该限制的最后一整行时自动截断内容。我相信,对于1.0库,执行批处理的唯一方法是指定最大行数,并希望(或仔细计算)数据不会超过您想要达到的限制。
https://stackoverflow.com/questions/12411045
复制相似问题