zoukankan      html  css  js  c++  java
  • 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,不要贪图写代码便捷!

  • 相关阅读:
    原生和jQuery的ajax用法
    sublime常用快捷键
    用filter:grayscale将图片过滤成灰色
    Docker搭建Zookeeper集群问题总结
    Linux下jdk环境配置
    window MySQL解压缩版部署及配置
    Windows下Nginx的配置及配置文件部分介绍
    JS 特性:可选链(?.)
    509道Java面试题解析:2020年最新Java面试题
    阿里面试题BIO和NIO数量问题附答案和代码
  • 原文地址:https://www.cnblogs.com/wanggang2016/p/13716763.html
Copyright © 2011-2022 走看看