【发布时间】:2019-12-19 21:03:44
【问题描述】:
我现在监控的一个应用程序在很长一段时间内一直处于加载时间过长的状态。我已将问题缩小到 Telerik RadGrid 的填充方式。我们查询一个SQL View,把返回的数据赋值给一个DataTable,用for each循环遍历每个DataRow,把每一列赋值给一个对象的对应属性,把这个对象加到一个集合中,然后给这个集合赋值作为 RadGrid 的数据源。
通过 DataTable 的每个循环大约需要 20 毫秒,返回的结果集可以是 700 到 5000 条记录。这会导致延迟 10-20 秒只是构建初始集合。
是否有更好的对象和方法集来完成此任务,或者是使用 DataTable 并通过我的方式遍历它是我最好的选择?我已经看到了有关 Parallel-Fors 和 SQLDataReaders 的建议,但我不确定它们中的任何一个是否会更快。
【问题讨论】:
-
许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。
-
如果您只需要遍历数据,DataReader 将是最快的方法。获得数据阅读器后,不要按列名访问数据,尽可能通过
ordinal(列号)访问它(您可以一次解析列名)。考虑使用 Dapper 之类的工具来读取和映射您的数据(获取对象集合),然后将该集合用作数据源。
标签: c# sql asp.net data-manipulation