【问题标题】:Sync Framework 2.0 + WCF Service - OutofMemoryException同步框架 2.0 + WCF 服务 - OutofMemoryException
【发布时间】:2011-05-20 22:05:32
【问题描述】:

我有一个跨 WCF 服务(IIS 托管)使用 Microsoft Sync Framework 2.0 来同步 SQL 2008 标准数据库(服务器)和 SQL CE 3.5(客户端)的过程。一切正常,直到一个用户开始收到 OutOfMemory 异常。事实证明,这个用户的数据集比任何其他用户都要大。

相关数据集有 800,000 行,从 SSMS 导出到 CSV 时的总大小为 174MB。大多数用户都在 20-30MB 范围内,效果很好。

我正在使用 DbServerSyncProvider 和 SqlCeClientSyncProvider。

我已经按照其他文章中的描述实现了批处理并发布了,但无济于事。据我了解, DbServerSyncProvider 中的批处理机制就是一次拉取多少个数据修订版。即使锚点差为 1,我仍然会产生相同大小的数据集。

我在我的服务上使用了 transferMode="Streamed",并且我在 IIS 中托管时应用了 Streamed 的修复程序。

我尝试将 maxReceivedMessageSize 提高,首先从 20MB 提高到 200MB,然后提高到 2GB,最后提高到 10GB,但均未成功。这是在服务器和客户端上完成的。

我的 WCF 跟踪日志显示 GetChanges 的执行,但从未在 Process 操作下记录任何内容。

我已阅读有关 SqlSyncProvider 以及它如何允许按内存大小进行批处理的信息。但是,我找不到有关通过 WCF 服务使用它的太多信息,在我尝试使用它重写我的客户端和服务器之前,我想检查一下我是否在某些事情上是个白痴,以及 SqlSyncProvider 是否可以解决我的问题,以及能够跨 WCF 服务传输。

提前谢谢...

【问题讨论】:

    标签: wcf microsoft-sync-framework


    【解决方案1】:

    内存不足很可能是由数据集的序列化方式引起的。

    如果您想使用 SqlSyncProvider 重写,请查看此链接上的特定于 N-Tier 的代码部分: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

    【讨论】:

    • DatasetSurrogates 运行良好。它显着提高了性能。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多