C#中Linq的Join比Where(m=>arr..Contains(m.id))的效率更高

开发工程中,经常遇到在集合中,根据另一个集合取出一些数据。

我之前常用的做法如下:

List<MyInfo> list = GetList(); // 约2W数据

int[] idArr = GetIDs();// 约几百

之前也一直没有去考虑效率问题。使用如下:

list.Where(m => idArr.Contains(m.id)).ToList();

通过条件,判断集合对象的id在数组中,逻辑没有问题,很正常的思维。(我的测试耗时约50ms)

但是,如果采用Join就会的到成倍的速度提升,代码如下:

list.Join(idArr, m => m.id, n => n, (m, n) => m).ToList();

我们换个思路,将idArr看做一个连接对象,用inner join方式连接,发现耗时缩短(我的测试与5ms)

由此可见:以上的使用情况,C#中Linq的Join比Where(m=>arr..Contains(m.id))的效率更高。

posted @ 2021-04-23 16:00  淋风淼淼  阅读(780)  评论(0编辑  收藏  举报