代码性能优化第一篇

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

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

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();//等待所以线程都执行完,进行下一步操作。

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

posted @ 2021-04-29 16:58  行走在0和1之间  阅读(90)  评论(0编辑  收藏  举报