C#之代码优化

时间:2023-03-09 15:07:56
C#之代码优化

1、if和swith:

  区别:1、if语句会执行多次判断,增加CPU的消耗,效率较低;switch只判断一次,效率较高

     2、if表示的是一个范围,switch表示一个点

2、for和foreach

  foreach:每变量一次就会生成一个额外的堆变量,每个变量占4个字节,用完后会销毁掉,GC会增大,因此尽量少用foreach

3、string和stringbuilder

  string:会生成一个对象

  stringbuilder:只产生一个对象,不会产生大量的 GC

4、内存: 

  栈:只要是new出来的引用类型和全局变量区,都在堆上;其他的都在栈上;Struct是值类型

  堆:只要是new出来的引用类型,都在堆上;

  全局变量区:static

  代码区:

5、数组

  1、线性顺序存储

    int[] tmpArr:这种数组在硬盘上的存储是线性顺序存储,在硬盘上产生线性顺序连续的存储空间,读取速度快,赋值效率高

  2、线性链式存储:增删效率高

    1、list<int> tmpList:

    2、ArrayList tmpArrList:能存储值类型,引用类型

      效率较低:tmpArrList.Add(3):装箱操作

           装箱:将值类型转换为引用类型

           int tmpInt=4,object tmpObj =(object)tmpInt,int temptwo=(int)tmpObj

           拆箱:从引用类型转换为值类型

    3、Dictionary tmpDict:里面存的是键值对

          1、是List<>的延伸   tempDict.Add(key,value)

          2、可以用两个数组来代替,一个数组存key,一个数组存value,不过要确定长度

6、Oop(面向对象编程):

  找对象----->面对对象编程(拆)----->框架的思想(标准化流程)------>工具开发

  1.继承:

    类:一个问题一个类

    继承:子类实例化的时候,先调用父类的构造函数,然后才调用子类里的构造函数,就是分配了两块内存(父类的内存和子类的内存),

       在析构的时候,先析构父类,再析构子类

    多态:父类的指针指向子类,而调用子类的方法

        Parent tmpParent = new Son();tmpParent.Update();调用的是子类里面的Update的方法

        内存的角度分析:父类中是virtual  void Update 子类里是override void Update

                虚函数表:

                  只要是带virtual的这种类,系统就会自动分配一个虚函数表的结构(Key(函数Update)和Value(函数Update的地址)的格式)

                  子类调用方法的时候,指针将父类的方法覆盖了

7、ref

    表示参数的地址和传进的变量地址一致