2013-06-06 4 views
2

В моем приложении Metro 8 для Windows у меня есть таблица в базе данных SQLite, иногда приходится обновлять большое количество записей (от 500 до 600). Я получаю записи из веб-службы, и я просматриваю записи и вставляю их в таблицу. Проблема в том, что эта операция занимает от 10 до 15 секунд, и она блокирует пользовательский интерфейс, включая индикатор выполнения. Код ниже.Вставка большого количества записей в базу данных Sqlite

await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
{ 
    foreach (var item in body3) 
    { 
     db.Insert(new Site 
      { 
       siteName = item.siteName, 
       siteAddress = item.siteAddress, 
       siteCity = item.siteCity, 
       siteState = item.siteState, 
       siteID = item.siteID 
      }); 
     progressBar.Value = i;         
     i++; 
    } 
}); 

Я думаю, что это проблема с SQLite. Похоже, я не могу исключать из этого исключения.

Я думаю, что мой реальный вопрос заключается в том, как заставить это работать правильно в другом потоке, чтобы он не влиял на пользовательский интерфейс. Я не обеспокоен тем, что для вставки записей требуется некоторое время. Я просто хочу, чтобы пользовательский интерфейс оставался отзывчивым.

ответ

0

Попробуйте таким образом.

foreach (var item in body3) 
{ 
    db.RunInTransaction(() => 
    { 
     db.Insert(new Site 
     { 
      siteName = item.siteName, 
      siteAddress = item.siteAddress, 
      siteCity = item.siteCity, 
      siteState = item.siteState, 
      siteID = item.siteID 
     }); 
    }); 
    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
    { 
     progressBar.Value = i;         
     i++; 
    }); 
} 
+0

Спасибо! Это сделал трюк. –

+0

Добро пожаловать Брайан :) – Xyroid

+2

На самом деле то, что лучше работает, это обернуть цикл foreach в транзакции. Теперь процесс настолько быстрый, что мне больше не нужен индикатор выполнения. Это продолжалось от 10 до 15 секунд до менее чем секунды. –

Смежные вопросы