最も低いオーバーヘッドを持つデータテーブルから一般的なリストを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

質問

ここでベストプラクティスを探しています。ごめん。私はそれが主観的であることを知っていますが、ここにはたくさんの賢い人がいるので、これを行う「非常に良い」方法があるはずです。

従業員と呼ばれるカスタムオブジェクトがあります。そのオブジェクトには、名前、電話、電子メールなどの7つのプロパティがあります。また、Tembloplyplopyesと呼ばれるSQLデータベースに、7つの列が多少同様のラベルが付いているテーブルもあります。私の目標は、クエリからの結果を従業員オブジェクトの一般的なリストに「変換」することです。これを行うための最良の方法は何ですか(最低のオーバーヘッド、最速)?

私が現在していることは、私がウェブ全体で提案しているのを見たものです。私はそれが私のページのロードを遅くしていると感じているので、私はそれが好きではありません。ジェネリックリストは、私がしていることをより速くしますが、顧客に価格を支払わせることに気分が悪いです。

これが私がしていることです:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

「プロパティ= dr ["column"]」のものを処理するDatarow(図のように)を取得するコンストラクターがあります。

あなたの考えを楽しみにしています。

役に立ちましたか?

解決

コードを簡単に見て、それがどのように使用されているかを見ていないので、リストの代わりにiEnumeratorを返します。その後、Hight Return Statementを使用すると、リストを2回ループすることはありません(1つは入力し、1つは表示されます)。

それで...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

他のヒント

プロセスのどの部分が遅いと思いますか?あなたの方法論には、私が見る限り、明白なパフォーマンスボトルネックはありません。

linq2sqlまたはエンティティフレームワークのようなまたはマッパーを使用することをお勧めします

リストを作成する理由は、サーバー側の関数間を通過することです。

データセットの参照やデータテーブルを渡すのではなく、リストを渡すことの利点は何ですか?

これらの考えはさておき、あなたが現在行っていることは、リストを作成するための標準的な手順です。スピードアップできるとどう思いますか?従業員オブジェクトをインストールしないことによって?その後、従業員のオブジェクトなしでは、おそらくエンティティモデリングを台無しにする必要があります。

あなたが今やっているのは、ある時点で何らかの形で行う必要があることであり、あなたが説明した方法よりも大幅に速くそれを行うことはできません。ただし、データをキャッシュすることで、必要な回数をまったく削減できます。

顧客のリストをキャッシュに保存します。たとえば、アプリケーションの開始時にそれを入力します。何かが顧客レコードを変更すると、キャッシュを更新し、レコードをデータベースに保存します。ユーザーによる読み取りは、データベースではなくキャッシュに移動します。

このアプローチは、通常、データベースに当たったどのアプローチよりも数桁高速になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top