我在这里寻找最好的做法。抱歉。我知道这是主观的,但这里有很多聪明的人,所以应该有一些“非常好”的方法来做到这一点。
我有一个名为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”]'的东西。
期待你的想法。
答案 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)
你现在正在做的事情是需要在某个时候以这种或那种方式完成,而你实际上并不能比你描述的那样快得多。但是,您可以通过缓存数据来减少必须执行此操作的次数。
将客户列表存储在缓存中。例如,在应用程序启动时填充它。当某些内容更改客户记录时,您更新缓存并将记录保存到数据库。任何用户的任何读取都将转到缓存,而不是数据库。
这种方法通常比任何访问数据库的方法快一个数量级。