C#中如何解決sqlite資料表/記錄刪除後資料庫記憶體不變的問題

來源:互聯網
上載者:User

標籤:

在C#中使用sqlite資料庫時發現,刪除了資料表或大量資料後,資料庫的並不會變小。

這是因為資料庫中刪除大量資料後,會留下原來的資料空間(空閑資料頁),資料庫預設不會自動釋放這些空間。可以通過"VACUUM"命令釋放空間。

 

網上查到兩種方法(手動/自動):

1、手動釋放空間

先寫一個執行sql語句的函數:

 1 private void ExecuteSql(string sDbPath, string sqlStr) 2 { 3     using (SQLiteConnection conn = new SQLiteConnection("data source = " + sDbPath)) 4     { 5         using (SQLiteCommand cmd = new SQLiteCommand()) 6         { 7             cmd.Connection = conn; 8  9             conn.Open();10             cmd.CommandText = sqlStr;11             cmd.ExecuteNonQuery();12 13             conn.Close();14         }15     }16 }

在刪除資料表/大量資料後,調用上述函數(dbPath為資料庫的地址)。

ExecuteSql(dbPath, "VACUUM");

 

2、設定資料庫為自動釋放空間

當資料庫中無資料表時,設定其屬性:

ExecuteSql(dbPath, "PRAGMA auto_vacuum = 1;");

測試了一下發現效果也挺好的。

 

比較兩種方法,自動更方便。但是需要注意的是,在進行頻繁的插入、更新、刪除操作時,資料庫會產生大量的記憶體片段。自動釋放空間的方法只能釋放空閑資料頁,但是並不會對記憶體片段進行整理,在這個過程中反而會產生額外的記憶體片段;而手動方式可以同時釋放空閑空間和整理記憶體片段。

C#中如何解決sqlite資料表/記錄刪除後資料庫記憶體不變的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.