0

同期フレームワークを使用して、SQLServer2008データベースをモバイルデバイス上のsqlCEと同期しています。いくつかの問題を除いて、すべてがうまく見えます。それらの1つは次のとおり
です。1000以上の行を同期したい場合、モバイルデバイスでOutOfMemory例外が発生します(同期が正常に完了すると、いくつかの行のデータをチェックして同期されているように見えます)。大きすぎるxmlがモバイルデバイスとサーバー間でローテーションしているのではないかと思いました(100行の場合はevrthで問題なく動作します)...そのため、送信されたデータを分割する方法について質問しました。しかし、多分私は間違っています。これに関するリソースが見つからなかったので、コンパクトデータベースに60Kbを追加するために何がこれほど多くのメモリを消費できるのか正確にはわかりません。

4

1 に答える 1

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
于 2010-01-26T16:23:22.443 に答える