首页 > 代码库 > Datatable筛选中Foreach、Linq、Select几种方法效率比较
Datatable筛选中Foreach、Linq、Select几种方法效率比较
假设要在Datatable中选出符合要求的一串数据,可以有Foreach循环、Linq语句和Select语句几种方法,构造一个简单数据后做了下效率对比,发现Linq最慢,其次Foreach,最快是Select。
代码如下:
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筛选中Foreach、Linq、Select几种方法效率比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。