【发布时间】:2010-05-14 06:43:46
【问题描述】:
考虑下面的代码:
Dataview someView = new DataView(sometable)
someView.RowFilter = someFilter;
if(someView.count > 0) { …. }
相当多的文章说 Datatable.Select() 比使用 DataViews 更好,但这些都是在 VS2008 之前。
Solved: The Mystery of DataView's Poor Performance with Large Recordsets
Array of DataRecord vs. DataView: A Dramatic Difference in Performance
在这个主题上谷歌搜索,我发现一些文章/论坛主题提到 Datatable.Select() 本身有很多错误(对此不确定)并且在各种情况下表现不佳。
关于 msdn 上的这个 (Best Practices ADO.NET) 主题,建议如果在数据表上定义了主键,则应使用 findrows() 或 find() 方法代替 Datatable.Select()。
这篇文章here (.NET 1.1) 对所有三种方法以及更多方法进行了基准测试。但这是针对 1.1 版的,所以不确定这些现在是否仍然有效。根据这个 DataRowCollection.Find() 优于所有方法,Datatable.Select() 优于 DataView.RowFilter。
所以我很困惑在数据表中查找行的最佳方法可能是什么。或者没有单一的好方法可以做到这一点,根据场景存在多种解决方案?
【问题讨论】:
标签: .net visual-studio-2008 performance ado.net datatable