我有一个使用Microsoft Sync Framework 2.0跨WCF服务(IIS托管)来同步SQL 2008标准数据库(服务器)和SQL CE 3.5(客户端)的进程。所有的工作都很完美,直到一个用户开始接收OutOfMemory异常。事实证明,该用户的数据集比任何其他用户都要大得多。Sync Framework 2.0 + WCF服务 - OutofMemoryException
相关数据集为800,000行,当从174MB的SSMS导出到CSV时,总大小为800,000行。大多数用户都在20-30MB范围内,工作正常。
我正在使用DbServerSyncProvider和SqlCeClientSyncProvider。
我已经实施了批处理,如其他文章中所述,并张贴,无济于事。据我了解,DbServerSyncProvider中的批处理机制就是一次拉取数据的多少次修订。即使锚点差异为1,我仍然会得到相同大小的数据集。
我在我的服务上使用transferMode =“Streamed”,并且我在IIS中托管时应用了Streamed的修复程序。
我已经尝试将maxReceivedMessageSize从20MB扩展到200MB,然后到2GB,最后到10GB,都没有成功。这是在服务器和客户端上完成的。
我的WCF Trace日志显示GetChanges的执行,但从未在Process操作下记录任何内容。
我已阅读关于SqlSyncProvider,以及它如何允许按内存大小进行批处理。但是,我无法通过WCF服务找到有关使用此信息的许多信息,但在尝试使用此方法重写我的客户端和服务器之前,我想检查一下是否是某个白痴,以及SqlSyncProvider是否可以解决我的问题,以及能够通过WCF服务进行传输。
在此先感谢...
DatasetSurrogates精美地工作。它显着提高了性能。谢谢 – 2011-05-20 17:09:56