【问题标题】:Can I store a list of objects to SQLite instead on breaking up the list and adding the objects individually?我可以将对象列表存储到 SQLite,而不是分解列表并单独添加对象吗?
【发布时间】:2017-03-29 20:25:43
【问题描述】:

我将一个类的对象列表存储到 SQLite 表中。该类有 30 个字符串,我的列表中有大约 6000 个该类的对象。它只有 6MB。分解这个列表并存储它需要将近一分钟。但是我可以将整个列表存储为一个吗?到目前为止,这是我的代码:

    List<TheClass> ListOfObjects;

    public static void AddAllObjects() {
        for (int i = 0; i < ListOfObjects.Count; i++) {
            AddObject(ListOfObjects[i]);
        }
    }

    public static void AddObject(Object obj) {
        database.SaveItem(obj);
    }

    public void SaveItem<T>(T item) {
        connection.Insert(item);
    }

【问题讨论】:

  • 您想将列表存储为一行吗?还是要将列表中的每个对象存储为一行?我的意思是,您是否只想将您的列表序列化为一个 blob,或者您是否正在寻找类似 sqlite 的批量插入的东西?
  • @LasseV.Karlsen 我目前的方法似乎非常低效,主要是因为插入的数量。我想以某种方式减少这个数字。也许是一团
  • 可以将 xml 存储到数据库中。但是你需要序列化数据。
  • @JeroenvanLangen 序列化也需要很多时间。我正在寻找一种方法来按原样存储列表。像一团
  • @james 关于原始代码,您是否在 一个 事务中执行 6000 次插入?...

标签: c# sql xamarin sqlite


【解决方案1】:

sqlite-net 的对象SQLiteConnection 有方法InsertAll

List<Object> models = new List<Object>();
// ...
// LocalConnection conn = ...;
SQLiteConnection db = conn.GetSQLiteConnection();
db.InsertAll(models,true); // the true means "run in transaction"

https://github.com/oysteinkrog/SQLite.Net-PCL/blob/master/src/SQLite.Net/SQLiteConnection.cs

顺便说一句,它是作为事务中的 foreach 实现的,所以我想这是唯一的方法,至少使用 sqlite-net。

【讨论】:

  • 难以置信,这已将其减少到 1126 毫秒读取和 435 毫秒写入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多