Datatable筛选中Foreach、Linq、Select几种方法效率比较
2014-10-24 10:23
387 查看
假设要在Datatable中选出符合要求的一串数据,可以有Foreach循环、Linq语句和Select语句几种方法,构造一个简单数据后做了下效率对比,发现Linq最慢,其次Foreach,最快是Select。
代码如下:
运行后得到如下结果:
Foreach 120014
LINQ 340026
SELECT 79994
SELECT效率最高,但具体也得看数据表是如何建立索引的,不同的索引对搜索结果有较大影响,LINQ效率居然低于Foreach,这是挺意外的,目前并不清除为什么会比Foreach更加耗时。
代码如下:
static void Main(string[] args) { int dataCount = 100000; DataTable dt = new DataTable(); dt.Columns.Add("MacID", typeof(int)); dt.Columns.Add("DevID"); DataColumn[] keys = new DataColumn[1]; keys[0] = dt.Columns[0]; dt.PrimaryKey = keys; for (int i = 0; i < dataCount; i++) { DataRow dr = dt.NewRow(); dr["MacID"] = i; dr["DevID"] = dataCount - i; dt.Rows.Add(dr); } long startTick; long stopTick; // Foreach int filterCount = 0; startTick = DateTime.Now.Ticks; foreach (DataRow item in dt.Rows) { if ((int)item[0] > 200) { filterCount++; } } Console.WriteLine("ID > 200: " + filterCount); stopTick = DateTime.Now.Ticks; Console.WriteLine("Foreach " + (stopTick - startTick)); // Linq startTick = DateTime.Now.Ticks; var newList = (from item in dt.AsEnumerable() where item.Field<int>(0) > 200 select item).ToList(); Console.WriteLine("ID > 200: " + newList.Count); stopTick = DateTime.Now.Ticks; Console.WriteLine("LINQ " + (stopTick - startTick)); // SELECT startTick = DateTime.Now.Ticks; var filterResult = dt.Select("MacID > 200"); Console.WriteLine("ID > 200: " + filterResult.Count()); stopTick = DateTime.Now.Ticks; Console.WriteLine("SELECT " + (stopTick - startTick)); Console.ReadLine(); }
运行后得到如下结果:
Foreach 120014
LINQ 340026
SELECT 79994
SELECT效率最高,但具体也得看数据表是如何建立索引的,不同的索引对搜索结果有较大影响,LINQ效率居然低于Foreach,这是挺意外的,目前并不清除为什么会比Foreach更加耗时。
相关文章推荐
- 几种字符串反转方法效率比较
- 在DataTable中检索数据的几种方法的比较
- 比较C#中几种常见的复制字节数组方法的效率
- .net datatable 查找一行时的方法比较datatable.rows.find vs datable.select vs dataview vs for loop
- mysql批量insert数据的几种方法的效率比较
- 几种字符串反转方法效率比较
- 几种分页方法效率比较
- [C#]几种字符串反转方法效率比较
- SQL 、Array.indexOf、Linq和DataTable.Select的效率对比
- DataTable 筛选数据,弃用Select()方法
- Asp.net 几种分页方法效率比较
- LINQ To SQL 提升效率的几种方法
- OFFICE文档转换到PDF的几种方法与转换效率和性能的简单比较
- foreach 与 Linq的 Select 效率问题
- 几种字符串反转方法效率比较
- Asp.net 几种分页方法效率比较
- C#访问BitMap几种方法效率比较
- java IO写入文件效率——几种方法比较
- oracle几种分页方法效率比较。
- PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)