• 规范代码,提高程序性能


        拥有良好的编码风格,不仅写出来的代码条理清晰,而且也会增强程序的健壮性,同时,遵守一些编码的规范,会使得程序的性能有很大的提高。如下是一些可以提高程序性能的编码规范,供大家参考。

    (1) 避免在循环体内创建对象:有些对象并不是在循环体内每次都改变状态,所以在循环体内创建对象会导致应创建对象和回收对象而导致的性能损失,应该把创建对象代码提到循环体的外部。

    不规范的代码:

    1 for (int i = 0; i < length; i++)
    2 {
    3   Person _person = new Person();
    4   ......
    5 }
    6 

     规范的代码:

    1 Person _person = new Person();
    2 for (int i = 0; i < length; i++)
    3 {
    4   ......
    5 }
    6 

    (2)      避免装箱和拆箱:把值类型对象转换为引用类型时会导致装箱操作,把引用类型转换回值类型的时候又导致拆箱的操作。一种典型的使用是ArrayListArrayListitemObject类型,如果实际应用过程中把值类型,例如int类型,作为ArayList的元素进行操作就会导致如上所述的性能问题。

    不规范的代码:

     1 ArrayList list = new ArrayList();
     2 for (int i = 0; i < 100; i++)
     3 {
     4   list.Add(i);
     5 }
     6 ......
     7 for (int j = 0; j < list.Count; j++)
     8 {
     9   int value = (int)list[j];
    10   ......
    11 }

    规范的代码

     1 List<int> list = new List<int>();
     2 for (int i = 0; i < 100; i++)
     3 {
     4   list.Add(i);
     5 }
     6 ......
     7 for (int j = 0; j < list.Count; j++)
     8 {
     9   int value = list[j];
    10   ......
    11 }
    12 

    (3)      多个字符串连接(连接操作大于5)时候,应使用StringBuilder,使用+操作符会导致创建新的字符串。

    不规范的代码:

    1 string str = "string";
    2 for (int i = 0; i < 100; i++)
    3 {
    4   str += i.ToString();
    5 }
    6 

    规范的代码:

    1 StringBuilder strbd = new StringBuilder("string");
    2 for (int i = 0; i < 100; i++)
    3 {
    4   strbd.Append(i);
    5 }
    6 string str = strbd.ToString();
    7 

    (4)      is as关键字:一种典型的应用场景是判断某个对象是否为某种类型,如果是,则显式转换为这种类型。其实这样的操作导致CLR两次核实对象的类型,对性能造成了一定的影响。

    不规范的代码:

    1 if (ds is DataSet)
    2 {
    3   DataSet _ds = (DataSet)ds;
    4   ......
    5 }
    6 

    规范的代码:

    1 DataSet _ds = ds as DataSet;
    2 if (_ds != null)
    3 {
    4   ......
    5 }
    6 

    规范的代码不仅易于阅读和维护,有时候还可以增强程序的性能,以上一些例子就是不规范的代码导致的性能问题,这些性能问题有的时候并不是十分突出,但是我们写代码要时刻有这样的意识。如果性能问题点太多,对整体程序的影响也是非常大的。


    作者:Dang Jian
    出处:http://www.cnblogs.com/dangjian/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    同时请关注我的独立博客-http://www.dang-jian.com

  • 相关阅读:
    idea jsp无法加载<c:foreach>循环遍历数据
    java POI读取Excel文件
    Javaweb中请求的资源[/Servlet]不可用解决方案
    大作业第一阶段冲刺(一)
    hive中sql左外连接查询列值为null
    关于ECharts在jsp页面无法显示的问题
    echarts通过ajax实现数据加载
    读书笔记
    解决:[Err] 1064
    idea启动Tomcat报错Artifact testdemo1:war exploded: Error during artifact deployment. See server log for details.问题解决
  • 原文地址:https://www.cnblogs.com/dangjian/p/1623056.html
Copyright © 2020-2023  润新知