Linq语句效率低下,慎用(记一次优化)

有一个wpf项目中,需要查询曲线,然后显示,数据间隔时长为10秒,需要显示24小时数据,大概数据量为8k多条,开始的代码是这样写的,没什么其他原因,因为写代码便捷,下面只贴出关键的一行代码:

RealTimeData item = realTimeDataList.Where(m => m.createtime > nowDateTime.AddSeconds((-i - 1) * ConfigInitail.DaqInterval) 
&& m.createtime < nowDateTime.AddSeconds((i - 1) * ConfigInitail.DaqInterval)).OrderByDescending(m => m.createtime).FirstOrDefault();

代码就不解释了,就是查询采集间隔时间内最新一条数据,整个曲线加载需要10秒左右,甚至有时候10秒以上,排除了其他原因,影响执行效率的应该就是在上面这一句;在我的印象里,for循环效率是最高的,查了一些资料很多人也是这个看法,那我改一版试下呗,

代码如下:

private RealTimeData GetRealTimeData(List<RealTimeData> realTimeDataList, DateTime nowDateTime)
        {
            for (int i = 0, count = realTimeDataList.Count; i < count; i++)
            {
                if (realTimeDataList[i].createtime >= nowDateTime.AddSeconds((-i - 1) * ConfigInitail.DaqInterval)
                    && realTimeDataList[i].createtime < nowDateTime.AddSeconds((i - 1) * ConfigInitail.DaqInterval))
                {
                    return realTimeDataList[i];
                }
            }
            return null;
        }

改完之后,一测试,2秒左右就可以加载出来,我靠,这效率,也相差太多了!!!现在才8k多条数据,数据量一大,相差的效率恐怕会更大,对于这种大数据处理情况,还是慎用Linq,不要贪图写代码便捷!

原文地址:https://www.cnblogs.com/wanggang2016/p/13716763.html