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)
我怎样才能避免这两个循环.他们的任何其他机制?
我不确定泛型如何与数据量联系起来; 它们是不相关的概念......我也不清楚为什么这需要你阅读所有内容两次.但是是的:仿制药在批量使用时很好(为什么它们不是?).但是,当然,找到问题的最佳方法是分析(服务器性能或带宽 - 在这种情况下可能更多是后者).
当然,更好的方法是:不要在网络表单上显示数千条记录; 用户该怎么做?使用分页,搜索,过滤,ajax等 - 每个可以想象的技巧 - 但不要向客户端发送数千条记录.
更新更新的问题; 设置属性的循环不一定是坏的.这是一个完全合适的内循环.在做任何事情之前,请查看这是否确实存在问题.我怀疑纯粹的带宽(服务器和客户端之间,或服务器和数据库)是最大的问题.如果你能证明这个循环是一个问题,你可以做的事情是优化:
PropertyDescriptor(而不是PropertyInfo),并使用HyperDescriptor它来加快速度DynamicMethod来完成工作 - 需要对IL有所了解,但速度非常快Expression来做同样的事情并使用.Compile()- 就像第二点一样,但是(IMO)更容易一些我可以为第一和第三发子弹添加例子; 我真的不想为第二个写一个例子,因为我不会再那样自己编写代码了(我会使用第3个选项,否则第1个).
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |