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

摘要:
现在只有超过8k条数据,如果数据量大,效率的差异会更大。对于这样的大数据处理,请谨慎使用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,不要贪图写代码便捷!

免责声明:文章转载自《Linq语句效率低下,慎用(记一次优化)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇互联网产品设计常用文档类型-BRD、MRD、PRD、FSD (idea中@Data不起作用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.NetCore 使用 Linq 动态拼接Expression表达式条件来实现 对EF、EF Core 扩展查询排序操作

相信在使用EF的时候对查询条件或者排序上的处理令人心烦,下面我们就来动态拼接表达式解决这一问题 当我们在查询中使用Where的时候可以看到如下参数 下面我们就来扩展 Expression<Func<T,bool>> 这个参数 第一步: 建立处理功能类 首先我们要创建一个查询条件转化为表达式的泛型功能类 如UosoExpressio...

LINQ中的Lambda表达式

Lambda Expressions in LINQ 在第12章,我提到可以用lambda表达式定义内联的委托定义。在如下表达式中: customer => customer.FirstName == "Donna" 左边的操作数,customer,是输入参数。右边的操作数是lambda表达式,检查客户的名字属性是否等于"Donna"。因此,对于给定...

EF性能优化

十年河东,十年河西,莫欺少年穷。 EF就如同那个少年,ADO.NET则是一位壮年。毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET。 也就是说:你所写的LINQ查询,最后还是要转化为ADO.NET的SQL语句,转化过程中无形降低了EF的执行效率。 但是,使用EF的一个好处就是系统便于维护,减少了系统开发时间,降低了生成成本。 OK,上...

Linq之关键字基本查询

子句 说明 from 指定数据源和范围变量(类似于迭代变量)。 where 根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 &#124;&#124;)分隔的布尔表达式筛选源元素。 select 指定当执行查询时返回的序列中的元素将具有的类型和形式。 group 按照指定的键值对查询结果进行分组。...

为什么说 LINQ 要胜过 SQL

如果你还没有沉溺于 LINQ,就会想这有啥大惊小怪的。SQL 并没有坏掉,为什么还要对它进行修补呢? 为什么我们还需要另外一种查询语言呢? 流行的说法是 LINQ 同 C#(或者 VB)集成在了一起,故而消除了编程语言和数据库之间配合上的鸿沟,同时为多个数据源的组合提供了单一的查询接口。虽然这些都是事实,但仅是故事的一部分。更重要的是:当要对数据库进行...

Linq对DataTable或者集合的排序,Where筛选,分组,统计总数sum等操作

//对集合进行筛选,排序,分组 var query = (from x in dsResult.Tables[0].AsEnumerable()                Where DataTrans.CBoolean(x["IsChecked"]) == true        Group x By new        {            ...