Как разделить процесс синхронизации в Sync framework

Я использую структуру синхронизации для синхронизации базы данных sql server 2008 с sqlCE на мобильном устройстве. Все выглядит нормально, кроме некоторых проблем. Один из них:
Если я хочу синхронизировать 1000 или более строк, я получаю исключение OutOfMemory на мобильном устройстве (хотя синхронизация завершается хорошо, потому что после этого я проверяю данные некоторых строк, и они выглядят синхронизированными). Я подумал, что, возможно, слишком большие xmls вращаются между мобильным устройством и сервером (для 100 строк evrth отлично работает) ... Вот почему я спросил, как разделить отправленные данные. Но может я ошибаюсь. Я не нашел никаких ресурсов по этому поводу, поэтому я точно не знаю, ЧТО может съесть столько памяти, чтобы добавить всего 60 КБ в компактную базу данных.


person 0x49D1    schedule 13.01.2010    source источник


Ответы (1)


Вам нужно будет реализовать какую-то пакетную обработку.

Его довольно наивная версия показана здесь: http://msdn.microsoft.com/en-us/library/bb902828.aspx.

Я видел, что вас интересует фильтрация. Если это приведет к отфильтровыванию некоторых или, скорее, многих строк, я бы рекомендовал написать свою собственную пакетную логику. Тот, который мы сейчас используем, устанавливает @sync_new_received_anchor как привязку строки @sync_batch_size: th для синхронизации.

В упрощенном виде логика выглядит так:

SELECT @sync_new_received_anchor = MAX(ThisBatch.ChangeVersion) 
    FROM (SELECT TOP (@sync_batch_size) CT.SYS_CHANGE_VERSION AS ChangeVersion 
        FROM TabletoSync
             INNER JOIN CHANGETABLE(CHANGES [TabletoSync],
                                @sync_last_received_anchor) AS CT 
            ON TabletoSync. TabletoSyncID = CT. TabletoSyncID 
            WHERE TabletoSync.FilterColumn = @ToClient
            ORDER BY CT.SYS_CHANGE_VERSION ASC) AS ThisBatch
person nj.    schedule 26.01.2010
comment
Спасибо! Попробую немного позже, потому что теперь у меня другая задача. Конечно, приму ответ, если он поможет, но я понял, что вы сказали, поэтому спасибо. - person 0x49D1; 27.01.2010
comment
Хорошо, просто дайте мне знать, если хотите, чтобы я кое-что прояснил. - person nj.; 27.01.2010