C# 对大量数据使用泛型是否可取?

C# 对大量数据使用泛型是否可取?,c#,asp.net,generics,datareader,C#,Asp.net,Generics,Datareader,比如说,我有成千上万的客户记录,我必须在网络表单上显示它们。另外,我还有一个CustomerEntity,它有10个属性。因此,当我使用DataReader获取数据并将其转换为List时,我需要在数据中循环两次 那么,在这种情况下,泛型的使用是可以接受的吗?如果是,那么我的应用程序性能如何 例如 在CustomerEntity类中,我拥有CustomerId和CustomerName属性。我从客户表中得到了100条记录 为了准备这个列表,我编写了以下代码 while (dr.Read())

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

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

例如

在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> 
    }
while(dr.Read())
{ 
//创建新的客户对象
//获取CustomerEntity属性的代码
对于(var index=0;index

如何避免这两个循环。它们还有其他机制吗?

我不确定泛型是如何与数据量联系在一起的;它们是不相关的概念。。。我也不清楚为什么这要求你每件事都读两遍。但是,是的:泛型在批量使用时很好(为什么不呢?)。但当然,发现问题的最佳方法是分析(服务器性能或带宽——在本例中可能是后者)

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


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

  • 切换到使用
    PropertyDescriptor
    (而不是
    PropertyInfo
    ),并使用以加快速度
  • 使用
    DynamicMethod
    编写代码来完成这项工作-需要对IL有一些了解,但速度非常快
  • 编写一个.NET 3.5/LINQ
    表达式
    来执行同样的操作,并使用
    .Compile()
    ——与第二点类似,但(IMO)要简单一些

我可以添加第一个和第三个项目符号的示例;我真的不想为第二个编写一个示例,因为我自己再也不会这样编写代码了(如果可用,我会使用第三个选项,否则使用第一个)。

我不确定泛型如何与数据量相关联;它们是不相关的概念。。。我也不清楚为什么这要求你每件事都读两遍。但是,是的:泛型在批量使用时很好(为什么不呢?)。但当然,发现问题的最佳方法是分析(服务器性能或带宽——在本例中可能是后者)

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


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

  • 切换到使用
    PropertyDescriptor
    (而不是
    PropertyInfo
    ),并使用以加快速度
  • 使用
    DynamicMethod
    编写代码来完成这项工作-需要对IL有一些了解,但速度非常快
  • 编写一个.NET 3.5/LINQ
    表达式
    来执行同样的操作,并使用
    .Compile()
    ——与第二点类似,但(IMO)要简单一些

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

< P>很难说明性能,但是考虑一下这些事情——

  • 泛型提供类型安全性

  • 如果要在页面中显示10000条记录,则应用程序可能无法使用。如果记录被分页,请考虑只返回那些实际需要的页面。

  • 您不需要在数据中循环两次。你在用这些数据做什么


  • 很难说出表演会是什么样子,但是考虑一下这些事情——

  • 泛型提供类型安全性

  • 如果要在页面中显示10000条记录,则应用程序可能无法使用。如果记录被分页,请考虑只返回那些实际需要的页面。

  • 您不需要在数据中循环两次。你在用这些数据做什么


  • +1.我记得有一个客户端要求显示搜索返回的所有记录……直到Datareader中指出“最终用户将如何处理数百万行!!(不要担心服务器上的负载)”时,我要求循环两次,因为一个循环用于实际记录,另一个循环用于内部属性。此循环用于将datareader的值设置为List。第二点是可以接受的,我可以记录下来,但如何避免循环?谢谢你的快速回复。我记得有一个客户要求