使用LinqDB SQLiteはデータベースクエリのデータは、データ、大量のデータや少量のかどうか、私は特に最初のクエリでは、特に時間がかかり感じます
27000のデータを含むデータテーブル
最初のクエリ:
- クエリ27000のデータ、時間のかかる1S
- 8データクエリが、また、750msを取りました
セカンダリクエリ:
- 27000データクエリは、475msを取りました
- 指定されたデータと時間のかかる73ms問い合わせ
照会するには、SQL文を使用し、のはそれを最適化してみましょう
SQLは、データベースを照会しました
SQL接続文字列:
1 VARの dbRelativePath = " のDbs \\ EnglishDict.db3 " 。 2 VARれたconnectionString = " データソース= " + System.Environment.CurrentDirectory + " \\ " + dbRelativePath + " バージョン= 3; "。
SQLクエリは、DataSetコレクションを返します。
1 /// <要約> 2 /// 获得数据列表 3 /// </要約> 4 パブリックデータセットGetListの(ストリング strWhere、列tableNameの) 5 { 6 のStringBuilder STRSQL = 新規のStringBuilder(); 7 strSql.Append(" 選択* " ); 8 strSql.Append($ " {} tableNameのFROM " )。 9 もし(strWhere.Trim()!= "" ) 10 { 11 strSql.Append(" " + strWhere); 12である } 13で返すクエリ(strSql.ToStringを()); 14 } 15 /// <概要> 図16は、/// クエリを実行し、データセットを返し 17。/// </要約> 18である/// <PARAM NAME = "たSqlString"> クエリ</ PARAM> 19 /// <戻り値> データセット</戻り値> 20であるパブリックデータセットクエリ(文字列たSqlString) 21である { 22れる使用 (SQLiteConnection接続= 新しいSQLiteConnection(れたconnectionString)) 23 { 24の データセットDS = 新しいデータセット()。 図25は、 お試し 26 { 27 )(connection.Openします。 28 SQLiteDataAdapterコマンド= 新しいSQLiteDataAdapter(SQLSTRING、接続)。 29 command.Fill(DS、" DS " )。 30 } 31 キャッチ(System.Data.SQLite.SQLiteExceptionのEX) 32 { 33 投 新しい例外(ex.Message); 34 } 35の リターンDS。 36 } 37 }
DataSetのデータセットのデータ転送リスト
1.反射を利用して、データは、クラスエンティティにマッピングされます
参照 データベースクエリを-データ転送のDataTableのエンティティのタイプ
1 /// <まとめ> 2 /// データリストを取得 3。 /// </要約> 4。 パブリックリスト<CoursewareInfo> GetCoursewares() 5。 { 6。 データセットGetListのDS =(文字列 .Empty、" 教材" ); 7 / / マッピングすることによって、データセットの転送エンティティクラスは 8。 VAR modelList = DataTableConverter <CoursewareInfo> .ToList(ds.Tables [ 0 ]); 9 リターンmodelList; 10 } 11は、 /// <まとめ> 12である /// データリストを取得しました 13 /// </要約> 14 公衆リスト<CoursewareInfo> GetCoursewares(ストリングQUERYTEXT) 15 { 16 VARのqueryString = $ " のような名前'%{QUERYTEXT}%' " 。 17の データセットDS = GetListの(のqueryString、" 教材" )。 18 // 通过映射、データセット转实体类 19 VAR modelList = DataTableConverter <CoursewareInfo> .ToList(ds.Tables [ 0 ])。 20 リターンmodelList。 21 }
私たちは、クエリデータのパフォーマンスや、同じデータテーブルを見て
最初のクエリ:
- 27000データクエリ、1612msを取りました
- 指定されたデータを照会するだけでなく、196msを取りました
セカンダリクエリ:
- 27000データクエリ、1484msを取りました
- 指定されたデータと時間のかかる59ms問い合わせ
このプログラムは時間がかかり、それが痛いの性能を反映しなければならない、あきらめます
2.直接データ・クラス・フィールドはに割り当て属性
DataTableの転送データのクラス:
1 /// <要約> 2 /// 将データテーブル转换成エンティティ列表 3 /// </要約> 4 /// <PARAM NAME = "DT"> </ PARAM> 5 /// <戻ります> </戻る> 6 パブリックリスト<CoursewareInfo> ConvertDtToModelList(データテーブルDT) 7 { 8 リスト<CoursewareInfo>リスト= 新しいリスト<CoursewareInfo> (); 9 のforeach(のDataRow DR でdt.Rows) 10 { 11 list.Add(DataRowToModel(DR))。 13 リターンリスト。 14 } 15 /// <要約> 16 /// 得到一个对象实体 17 /// </要約> 18 公衆CoursewareInfo DataRowToModel(のDataRow行) 19 { 20 CoursewareInfoモデル= 新しいCoursewareInfo()。 21 であれば(行!= NULL ) 22 { 23 model.LocalId =行[ " LOCALID " ] .ToString(); 24 model.RemoteId =ロウ[ "RemoteId " ] .ToString(); 25 model.Name =行[ " 名前" ] .ToString(); 26 } 27 リターンモデル; 28 }
リストを取得します:
1 /// <まとめ> 2 /// データリストを取得 3。 /// </要約> 4。 パブリックリスト<CoursewareInfo> GetCoursewares() 5。 { 6。 データセットGetListのDS =(文字列 .Empty、" 教材" ); 7 / / フィールド割り当て、データセットの転送エンティティクラスを介し 。8 VAR modelList = ConvertDtToModelList(ds.Tables [ 0 ]); 9 リターンmodelList; 10 } 11。 /// <概要> 12である /// データリスト取得 13 /// </要約> 14 公衆リスト<CoursewareInfo> GetCoursewares(文字列QUERYTEXT) 15 { 16 VARのqueryString $ = " のような名前'QUERYTEXTの%{%}' " ; 17 データセットDS = GetListの(のqueryString、" 教材" )。 18 // フィールド割り当て、データセットの転送エンティティ・クラスを介して 19。 VAR modelList = ConvertDtToModelList(ds.Tables [ 0 ]); 20である 戻り、modelListが 21です }
クエリデータのパフォーマンスや、同じデータテーブルを見てください
最初のクエリ:
- 27000データクエリは、660msを取りました
- 指定されたデータを照会するだけでなく、191msを取りました
セカンダリクエリ:
- 27000データクエリは、500ミリ秒を要しました
- 指定されたデータと時間のかかる58ms問い合わせ
このシナリオでは、データのクエリのパフォーマンスが大幅に改善されています。
概要:相対LINDB、SQLクエリプログラムクエリデータのパフォーマンスを使用するには、はるかに良いでしょう