簡體   English   中英

性能差的Sqlite.net擴展

[英]Poor Performance Sqlite.net extensions

嗨,我正在開發Xamarin應用程序,該應用程序可以加載很多行(大約1萬行)

我的性能真的很差,比如插入對象的5K行需要2分鍾。

我使用InsertOrReplaceWithChildren:

 public  bool Insert_Update_Many<T>(List<T> obj)
    {
        try
        {
            lock (this.Lock) {
                _connection.RunInTransaction(() => {
                    _connection.InsertOrReplaceAllWithChildren(obj, true);
                });
            }
            return true;
        }
        catch (Exception ex)
        {
            Debug.WriteLine("[SQLITE_ERROR]: " + ex.ToString());
            return false;
        }
    }

由於我添加了“ RunInTransaction”,因此有了改進(之前沒有超過5分鍾)。

我的對象包含關系船。

有什么辦法可以優化嗎?

在看不到實際代碼的情況下很難分辨,但是我遇到了一些可能影響性能的問題:

  • InsertOrReplace性能很差 :嘗試調用簡單的Insert語句而不是InsertOrReplace 在某些情況下,這可能會產生很大的影響。
  • SQLite.Net一對一地執行插入操作 :這是一種解決方法,很復雜,因為它要求您手動編寫插入查詢才能對每個語句執行多個插入。
  • SQLite-Net擴展在插入后執行update操作 :這很容易解決,您可以自己分配外鍵,並在數據庫密集型操作上調用普通的SQLite.Net Insert

您可以使用WAL模式提高插入性能:

 var journalMode = await globalConn.ExecuteScalarAsync<string>("PRAGMA journal_mode = wal");

這是一個建議:

嘗試使用原始查詢,或者實際上,首先分析代碼,也許其中存在瓶頸。

而且,如果您一無所獲,我想您只需要異步執行並讓用戶等待即可( 或將數據庫文件與您的應用一起交付

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM