2011-05-20 74 views
0

我有一个使用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服务进行传输。

在此先感谢...

回答

2

的内存不足是最有可能的方式造成的数据集进行序列化。

如果要使用SqlSyncProvider重新编写代码,请参阅此链接上的“特定于N层的代码”一节:http://msdn.microsoft.com/en-us/library/dd918908.aspx#Y3096。这应该给你一个关于为SqlSyncProvider编写WCF服务组件的想法。

您还可以检查出样品SQL Server and SQL Compact N-Tier with WCF

如果你想保留现有的供应商,你可以使用DatasetSurrogates玩耍。在此处查看示例:Sync Framework WCF-based Synchronization for Offline scenario – Using custom dataset serialization

+0

DatasetSurrogates精美地工作。它显着提高了性能。谢谢 – 2011-05-20 17:09:56

相关问题