向Sqlite数据库中插入大量记录

本文关键字:记录 插入 Sqlite 数据库 | 更新日期: 2023-09-27 18:17:21

在我的Windows 8 metro应用程序中,我在SQLite数据库中有一个表,有时将不得不更新大量的记录(大约500到600)。我从web服务获取记录,然后循环遍历这些记录并将它们插入到表中。问题是,这个操作大约需要10到15秒,并且它正在锁定UI,包括进度条。代码如下:

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的问题。我似乎也无法从中发现异常。

我想我真正的问题是如何让这个在另一个线程中正确运行,所以它不影响UI。我并不担心插入记录需要花费一些时间。我只是想让UI保持响应

向Sqlite数据库中插入大量记录

——不要在每次插入循环时更新你的UI…如果需要的话,可能每20%

——使用事务——http://www.sqlite.org/faq.html 19提高SQLite的每秒插入性能?

试一下。

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++;
    });
}