zoukankan      html  css  js  c++  java
  • 代码性能优化第一篇

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

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

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

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

  • 相关阅读:
    SIEBEL应用概述
    Picklist的配置
    MVG配置
    Siebel计划和实施
    Siebel学习笔记
    Siebel界面的搭建
    标签a点击以后,5秒内禁止点击,5秒后激活
    表单重复提交的常见应用场景
    h5做app和原生app有什么区别?
    Maven + Eclipse + Tomcat
  • 原文地址:https://www.cnblogs.com/zwyAndDong/p/14718706.html
Copyright © 2011-2022 走看看