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
- 使用
编写代码来完成这项工作-需要对IL有一些了解,但速度非常快DynamicMethod
- 编写一个.NET 3.5/LINQ
来执行同样的操作,并使用表达式
——与第二点类似,但(IMO)要简单一些.Compile()
我可以添加第一个和第三个项目符号的示例;我真的不想为第二个编写一个示例,因为我自己再也不会这样编写代码了(如果可用,我会使用第三个选项,否则使用第一个)。我不确定泛型如何与数据量相关联;它们是不相关的概念。。。我也不清楚为什么这要求你每件事都读两遍。但是,是的:泛型在批量使用时很好(为什么不呢?)。但当然,发现问题的最佳方法是分析(服务器性能或带宽——在本例中可能是后者) 当然,更好的方法是:不要在web表单上显示数千条记录;用户将如何处理这个问题?使用分页、搜索、过滤、ajax等——每一个可以想象的技巧——但不要向客户端发送数千条记录
重新审议更新后的问题;设置属性的循环并不一定是坏的。这是一个完全合适的内部循环。在做任何事情之前,先分析一下这是否真的是一个问题。我怀疑带宽(服务器和客户端之间,或者服务器和数据库之间)是最大的问题。如果你能证明这个循环是一个问题,那么你可以做一些事情来优化:
- 切换到使用
(而不是PropertyDescriptor
),并使用以加快速度PropertyInfo
- 使用
编写代码来完成这项工作-需要对IL有一些了解,但速度非常快DynamicMethod
- 编写一个.NET 3.5/LINQ
来执行同样的操作,并使用表达式
——与第二点类似,但(IMO)要简单一些.Compile()
我可以添加第一个和第三个项目符号的示例;我真的不想为第二个例子写一个简单的例子,因为我自己不会再那样编写代码(我会用第三个选项,第一个)。 < P>很难说明性能,但是考虑一下这些事情——
很难说出表演会是什么样子,但是考虑一下这些事情——
+1.我记得有一个客户端要求显示搜索返回的所有记录……直到Datareader中指出“最终用户将如何处理数百万行!!(不要担心服务器上的负载)”时,我要求循环两次,因为一个循环用于实际记录,另一个循环用于内部属性。此循环用于将datareader的值设置为List。第二点是可以接受的,我可以记录下来,但如何避免循环?谢谢你的快速回复。我记得有一个客户要求