SQLの対データベースクエリのパフォーマンスのLinqDBは、データベースクエリをクエリ - データ転送のDataTableのエンティティタイプを

使用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クエリプログラムクエリデータのパフォーマンスを使用するには、はるかに良いでしょう

おすすめ

転載: www.cnblogs.com/kybs0/p/11740729.html