如何从具有最低开销的数据表中获取通用列表?

时间:2009-11-09 14:56:28

标签: c# asp.net generics overhead

我在这里寻找最好的做法。抱歉。我知道这是主观的,但这里有很多聪明的人,所以应该有一些“非常好”的方法来做到这一点。

我有一个名为Employee的自定义对象。该对象有七个属性,如姓名,电话,电子邮件等。我的SQL数据库中还有一个名为tblEmployees的表,其中七列标记的方式有些类似。我的目标是将查询结果“转换”为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));
}

我有一个构造函数,它接受一个DataRow(如图所示)处理'property = dr [“column”]'的东西。

期待你的想法。

5 个答案:

答案 0 :(得分:1)

你认为这个过程的哪个部分很慢?就我所见,您的方法没有任何明显的性能瓶颈。

答案 1 :(得分:0)

我建议使用像Linq2SQL或实体框架

这样的OR Mapper

答案 2 :(得分:0)

构建列表的原因是在服务器端的功能之间传递。

传递列表与传递DataSet引用甚至是DataTable相比有什么好处?

除了这些想法之外,您目前正在做的是构建列表的标准过程。您认为如何加快速度?通过不实例化Employee对象?然后,您将不得不使用可能会弄乱您的实体建模的Employee对象。

答案 3 :(得分:0)

简单地查看代码,而不是看它是如何使用的,我会返回一个IEnumerator而不是列表。然后,您可以使用yield return语句,并且不会循环遍历列表两次(一个填充,一个显示)。

所以...

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);
   }
}

答案 4 :(得分:0)

你现在正在做的事情是需要在某个时候以这种或那种方式完成,而你实际上并不能比你描述的那样快得多。但是,您可以通过缓存数据来减少必须执行此操作的次数。

将客户列表存储在缓存中。例如,在应用程序启动时填充它。当某些内容更改客户记录时,您更新缓存并将记录保存到数据库。任何用户的任何读取都将转到缓存,而不是数据库。

这种方法通常比任何访问数据库的方法快一个数量级。