天天看點

使用事務操作SQLite資料批量插入,提高資料批量寫入速度,源碼講解

SQLite資料庫作為一般單機版軟體的資料庫,是非常優秀的,我目前單機版的軟體産品線基本上全部替換Access作為優選的資料庫了,在開發過程中,有時候需要批量寫入資料的情況,發現傳統的插入資料模式非常慢,幾千條資料的寫入或者更新可能需要好幾分鐘時間,而SqlServer則相同的操作可能幾秒即可,有無更好的方法來提高它的響應速度呢?答案是有的,就是采用事務送出,預設SQLite的資料庫插入操作,如果沒有采用事務的話,它每次寫入送出,就會觸發一次事務操作,而這樣幾千條的資料,就會觸發幾千個事務的操作,這就是時間耗費的根源。本文通過詳細代碼介紹如何使用事務來提高整個批量插入資料的速度,并以實際的Winform開發架構中的字典管理子產品的批量插入功能來進行介紹,通過前後速度的對比,使得事務操作提高響應速度更有說服力。

使用事務操作SQLite資料批量插入,提高資料批量寫入速度,源碼講解

對一些診斷的資料錄入,一般情況下都可能是幾千條的資料,還有可能更多的一些分類字典,那麼如果每次都需要等待幾分鐘或者幾十分鐘,那麼這樣的響應體驗肯定很差。

為了提高響應速度,我這裡使用了事務操作,整個事務操作是基于EnterpriseLibray類庫的資料庫操作,由于我已經在架構的基類中做了封裝,是以我們這裡看到整個處理過程即可。

使用事務操作SQLite資料批量插入,提高資料批量寫入速度,源碼講解

其中MyRegion裡面的代碼就是周遊每行的資料,構造資料字典對象和排序号,然後調用InsertDictData函數進行資料的錄入。其中InsertDictData函數的代碼是

整個插入功能按鈕的處理全部代碼如下所示。

上面的批量插入,經過前後的測試,2千條資料批量插入SQLite資料庫,需要大概3~4分鐘左右,如果采用了事務操作,則在1~2秒内寫入完成,速度提高不知道多少倍。如果是操作資料比較多的,強烈建議使用事務進行操作,可以給客戶很好的體驗效果。

如果嫌上面的代碼複雜,可以看下面的講解代碼可能就明白了

上面是一種比較簡單原始的事務操作,如果批量插入資料,同樣能夠起到一樣的效果。