1

我有成千上万的Customer记录,我必须在网络表单上显示它们。另外,我有一个CustomerEntity有 10 个属性。因此,当我使用 a 获取数据DataReader并将其转换为时,List<CustomerEntity>我需要对数据进行两次循环。

那么在这种情况下使用泛型是否可行?如果是,那么我的应用程序性能如何?

例如

在 CustomerEntity 类中,我有 CustomerId 和 CustomerName 属性。我从客户表中获得了 100 条记录,然后为了准备列表,我编写了以下代码

while (dr.Read()) 
    { 
       // creation of new object of customerEntity 
       // code for getting properties of CustomerEntity 
       for (var index = 0; index <  MyProperties.Count; index++) 
       { 
         MyProperty.setValue(CustEntityObject,dr.GetValue(index)); 
        } 
      //adding CustEntity object to List<CustomerEntity> 
    }

我怎样才能避免这两个循环。他们还有其他机制吗?

4

2 回答 2

9

我不太确定泛型与数据量的关系。它们是不相关的概念……我也不清楚为什么这需要您阅读所有内容两次。但是是的:泛型在大量使用时很好(为什么不呢?)。但是,当然,找出问题的最佳方法是分析(服务器性能或带宽——在这种情况下可能更多的是后者)。

当然更好的方法是:不要在 Web 表单上显示数千条记录;用户将如何处理它?使用分页、搜索、过滤、ajax 等——所有可以想象的技巧——但不要向客户端发送数千条记录。


重新更新问题;设置属性的循环不一定是坏事。这是一个完全合适的内部循环。在做任何事情之前,先分析一下这是否真的是一个问题。我怀疑纯粹的带宽(服务器和客户端之间,或服务器和数据库之间)是最大的问题。如果你能证明这个循环是一个问题,那么你可以做一些优化:

  • 切换到使用PropertyDescriptor(而不是PropertyInfo),并使用HyperDescriptor使其更快
  • 编写代码DynamicMethod来完成这项工作 - 需要对 IL 有一些了解,但速度非常快
  • 编写一个 .NET 3.5 / LINQExpression来做同样的事情并使用.Compile()- 就像第二点一样,但是(IMO)更容易一些

我可以为第一个和第三个项目符号添加示例;我真的不想为第二个写一个例子,只是因为我自己不会再那样写代码(我会使用第 3 个可用的选项,否则第 1 个)。

于 2009-09-24T11:47:13.290 回答
0

很难说表演会是什么,但请考虑这些事情 -

  1. 泛型提供类型安全

  2. 如果您要在页面中显示 10,000 条记录,您的应用程序可能无法使用。如果正在分页记录,请考虑仅返回您所在页面实际需要的那些记录。

  3. 您不需要循环遍历数据两次。你用数据做什么?

于 2009-09-24T11:49:23.380 回答