Медленное обновление / вставка в SQL Server CE с помощью LinqToDatasets - PullRequest
0 голосов
/ 10 марта 2010

У меня есть мобильное приложение, которое использует LinqToDatasets для обновления / вставки в файл SQL Server CE 3.5.

Мой код выглядит так:

// All the MyClass Updates
MyTableAdapter myTableAdapter = new MyTableAdapter();

foreach (MyClassToInsert myClass in updates.MyClassChanges)
{
    // Update the row if it is already there
    int result = myTableAdapter.Update(myClass.FirstColumn, 
                                       myClass.SecondColumn, 
                                       myClass.FirstColumn);
    // If the row was not there then insert it.
    if (result == 0)
    {
        myTableAdapter.Insert(myClass.FirstColumn, myClass.SecondColumn);
    }
}

Этот код используется для синхронизации базы данных с базой данных сервера. Проблема в том, что если это полное обновление (например, в первый раз), существует много обновлений (около 125). Это делает этот код (и больше таких циклов, как это занимает очень много времени (у меня есть три таких цикла, которые занимают более 30 секунд каждый).

Есть ли более быстрый или лучший способ делать такие обновления / вставки?

(я видел этот проект Codeplex , но не мог понять, как заставить его работать как с обновлениями, так и со вставками.)

1 Ответ

1 голос
/ 13 марта 2010

Вы всегда должны использовать SqlCeResultSet для доступа к данным на мобильных устройствах для максимальной производительности и использования памяти. Вы должны определить данные для вставки, а затем использовать код, подобный образцу SqlCeBulkCopy, и использовать аналогичный код, используя методы поиска и обновления SqlCeResultSet.

...