是否可以将泛型用于大量数据?

Lax*_*man 1 c# asp.net generics datareader

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

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

对于Eg

在CustomerEntity类中,我有CustomerId和CustomerName属性.我从Customer Table获得了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> 
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这两个循环.他们的任何其他机制?

Mar*_*ell 9

我不确定泛型如何与数据量联系起来; 它们是不相关的概念......我也不清楚为什么这需要你阅读所有内容两次.但是是的:仿制药在批量使用时很好(为什么它们不是?).但是,当然,找到问题的最佳方法是分析(服务器性能或带宽 - 在这种情况下可能更多是后者).

当然,更好的方法是:不要在网络表单上显示数千条记录; 用户该怎么做?使用分页,搜索,过滤,ajax等 - 每个可以想象的技巧 - 但不要向客户端发送数千条记录.


更新更新的问题; 设置属性的循环不一定是坏的.这是一个完全合适的内循环.在做任何事情之前,请查看这是否确实存在问题.我怀疑纯粹的带宽(服务器和客户端之间,或服务器和数据库)是最大的问题.如果你能证明这个循环是一个问题,你可以做的事情是优化:

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

我可以为第一和第三发子弹添加例子; 我真的不想为第二个写一个例子,因为我不会再那样自己编写代码了(我会使用第3个选项,否则第1个).