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

我有一个名为 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"]' 的东西。

期待您的想法。

有帮助吗?

解决方案

简单地看一下代码,而不是看它是如何使用的,我会返回一个 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);
   }
}

其他提示

您觉得这个过程的哪一部分比较慢?据我所知,您的方法没有任何明显的性能瓶颈。

我建议使用像 Linq2SQL 或实体框架这样的 OR Mapper

构建列表的原因是为了在服务器端的函数之间传递。

与传递 DataSet 引用甚至 DataTable 相比,传递列表有什么优点?

抛开这些想法不谈,您当前正在做的是构建列表的标准程序。你认为怎样才能加快速度?通过不实例化 Employee 对象?然后,您将不得不放弃 Employee 对象,这可能会扰乱您的实体建模。

您现在正在做的事情需要在某个时刻以某种方式完成,并且您实际上无法比您所描述的方式更快地完成它。但是您可以通过缓存数据来减少必须执行此操作的次数。

将客户列表存储在缓存中。例如,在应用程序启动时填充它。当客户记录发生变化时,您可以更新缓存并将记录保存到数据库中。任何用户的任何读取都将进入缓存,而不是数据库。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top