• 代码性能优化第一篇


    在日常中我们常常遇到一些代码比较耗时。这个时候经常会遇到一些优化代码的工作。这里我就说一下我坐优化过程中的经验。(本人小白,不喜勿喷)

    耗时操作大致都是在处理一些数据量比较大的操作,或者在查询一些数据方面的问题。

    1.首先先查看一下数据范围。能定为范围的尽量不要做一些全表查询。比如我只用IsEnable=1的数据。但是你那里非要查全部的。

    2.查询操作时最好根据索引查询,定义好索引。(请自行查看索引的相关规则,避免没有命中索引,导致查询变慢)

    3.缓存可以解决一部分数据问题

    4.多线程也是优化的一种高效方式。

    下面我说一下我在实际中遇到的问题:

    先描述一下实际场景。最近在我优化的一个代码情景中:数据是在内存中操作的,

    但是数据需要大量的循环,在循环的过程中需要运用大量的计算逻辑。并且在循环当中,还需要对被循环的对象做一些值的改变。

    当时我第一个想到的是多线程,直接Task.Run。不过后来发现这样会导致同时对一个集合做增删改的操作,这样会报错。所有后来用了BlockingCollection 。

    BlockingCollection 是一个线程安全集合类。可提供以下功能:

    实现制造者-使用者模式。

    通过多线程并发添加和获取项。

    可选最大容量。

    集合为空或已满时通过插入和移除操作进行阻塞。

    插入和移除操作不发生阻塞,或在指定时间内发生阻塞。

    官方文档:https://docs.microsoft.com/zh-cn/dotnet/standard/collections/thread-safe/blockingcollection-overview

    所以我最后的解决办法是分批开启多线程

    Task task = new Task(() =>{

      for(int i=0;i<index.count;i++){

        new Task(()=>{

          NewMethod();//耗时的循环方法

        },TaskCreationOptions.AttachedToParent).Start();

      }

    });

    task.Start();

    task.Wait();//等待所以线程都执行完,进行下一步操作。

    以上是我这个方案优化代码的大致思路,留给大家借鉴一下。

  • 相关阅读:
    ZoneJS 的原理与应用
    RxJS 中的观察者和迭代器模式
    前端三大框架:数据绑定与数据流
    Angular 的前世今生
    验证Kubernetes YAML的最佳实践和策略
    GitOps初阶指南:将DevOps扩展至K8S
    如何使用Istio 1.6管理多集群中的微服务?
    5个规则,确保你的微服务优化运行
    使用Thanos实现Prometheus指标联邦
    丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
  • 原文地址:https://www.cnblogs.com/zwyAndDong/p/14718706.html
Copyright © 2020-2023  润新知