У меня есть процесс, использующий Microsoft Sync Framework 2.0 через службу WCF (IIS Hosted) для синхронизации базы данных SQL 2008 Standard (сервер) и SQL CE 3.5 (клиент).Все работало отлично, пока один пользователь не начал получать исключения OutOfMemory.Как оказалось, у этого пользователя есть набор данных, который значительно больше, чем у любого другого пользователя.
Размер рассматриваемого набора данных составляет 800 000 строк, а общий размер при экспорте в CSV из SSMS составляет 174 МБ.Большинство пользователей находятся в диапазоне 20-30 МБ, что прекрасно работает.
Я использую DbServerSyncProvider и SqlCeClientSyncProvider.
Я реализовал пакетирование, как описано в других статьях, и опубликовал, но безрезультатно.,Насколько я понимаю, механизм пакетирования в DbServerSyncProvider - это просто количество ревизий данных, которые нужно извлечь за одно нажатие.Даже если якорная разница равна 1, я по-прежнему получаю набор данных того же размера.
Я использую TransferMode = "Streamed" в своем сервисе и применил исправление для Streamed при размещении в IIS.
Я попытался увеличить maxReceivedMessageSize, сначала с 20 МБ до 200 МБ, затем до 2 ГБ и, наконец, до 10 ГБ, но все безуспешно.Это было сделано как на сервере, так и на клиенте.
В моих журналах трассировки WCF показано выполнение GetChanges, но в журнале действий процесса ничего не регистрируется.
Я читал о SqlSyncProvider и о том, как онпозволяет дозировать по объему памяти.Я не могу найти много информации об использовании этого через Службу WCF, и прежде чем я попытаюсь переписать мой клиент и сервер, используя это, я хотел проверить, был ли я идиотом на чем-то и мог ли SqlSyncProvider решить мою проблемунаряду с возможностью передачи через службу WCF.
Заранее спасибо ...