0

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

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

私が現在行っていることは、ウェブ全体で提案されているのを見てきたことです。ページの読み込みが遅くなるような気がするので、好きではありません。ジェネリック リストのおかげで仕事がはかどりますが、顧客に代償を払わせるのは気が進まないのです。

これが私がやっていることです:

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

'property = dr["column"]' を処理する DataRow (図のように) を取るコンストラクタがあります。

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

4

5 に答える 5

1

Which part of the process do you feel is slow? Your methodology doesn't have any glaring performance bottlenecks as far as I can see.

于 2009-11-09T15:00:48.500 に答える
0

Briefly looking at the code, and not seeing how it is used, I would return a IEnumerator instead of a list. You can then use the yield return statement and you won't be looping through the list twice (one to populate and one to display).

so...

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);
   }
}
于 2009-11-09T15:05:03.773 に答える
0

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

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

通常、このアプローチは、データベースにヒットするどのアプローチよりも桁違いに高速です。

于 2009-11-09T15:28:04.460 に答える
0

Linq2SQL やエンティティ フレームワークなどの OR マッパーを使用することをお勧めします。

于 2009-11-09T15:00:18.063 に答える
0

リストを作成する理由は、サーバー側の関数間を渡すためです。

DataSet 参照や DataTable を渡すのではなく、リストを渡す利点は何ですか?

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

于 2009-11-09T15:00:47.150 に答える