火線救急!十萬火急。
今天一做工控哥們問我,Sqlite查詢幾百條記錄,速度奇慢,他的軟體是工控機上一個工具,今 天查詢資料特别的慢,就幾百條記錄,也要5、6秒出來,百思不得其解。我調笑他說:“兄弟,你是不是上衛生間不記得洗手了”。
此時他苦笑,搞不好,要挨批了。沒辦法,既然是江湖救急,那就來點真的吧?
1、建表代碼:(總體來說沒發現什麼大問題!)
strSqlCMD = "CREATE TABLE IF NOT EXISTS SCGC_DataTB(id INTEGER PRIMARY KEY AUTOINCREMENT ,dateTime TEXT,userInfor TEXT,str_MJH VARCHAR(30),str_DDH VARCHAR(30),str_PFM VARCHAR(30),str_prodCnt VARCHAR(30),str_workMode VARCHAR(30)," +
"param_1 VARCHAR(30),param_2 VARCHAR(30),param_3 VARCHAR(30),param_4 VARCHAR(10),param_5 VARCHAR(10),param_6 VARCHAR(10),param_7 VARCHAR(10),param_8 VARCHAR(10),param_9 VARCHAR(10),param_10 VARCHAR(10)," +
"param_11 VARCHAR(10),param_12 VARCHAR(10),param_13 VARCHAR(10),param_14 VARCHAR(10),param_15 VARCHAR(10),param_16 VARCHAR(10),param_17 VARCHAR(10),param_18 VARCHAR(10),param_19 VARCHAR(10),param_20 VARCHAR(10)," +
"param_21 VARCHAR(10),param_22 VARCHAR(10),param_23 VARCHAR(10),param_24 VARCHAR(10),param_25 VARCHAR(10))";
Public.SQLiteHelpers.ExecuteNonQuery(strSqlCMD, null);
2、查詢語句:
sqlCMD = "SELECT * FROM SCGC_DataTB " + whereCMD + " ORDER BY id DESC LIMIT 0,50";
DataSet dataSet = Public.SQLiteHelpers.ExecuteDataSet(sqlCMD, null);
一眼看到大問題,有經驗的程式員知道,查詢語句時,不要為了省事,千萬别用*代替了具體的字段。我這位工控朋友,平時他們資料量不太,是以估計沒在意。這次翻船了,好了知道原因,那就好辦了。
1、去掉*号,用具體字段代替。
2、優化操作資料庫Sqlite類。
3、取消DataGridView所有行與列的自适應。
4、綁定資料源時,在工控機裡,盡量不要用線程。
好的,廢說就說這麼多啊!問題已經解決,大功完成,問個紅包先。