接着上篇文章:
2、字符串拼接(简单,直接结论)
使用“a” + “b”在几次(10次以内吧)连接是不会产生gc的但是大量连接就会产生;
连接多的用StringBuilder,内部Buffer默认16,多的时候还会重新分配,也可指定值,也会有GC,但是当连接次数多时GC明显少于“+”。
3、Struct和Class
(顺便介绍一下C#中的Struct和Class,这样才有利于优化的了解,充分利用值类型和引用类型,减少拆装箱,减少堆内存,使效率最高)
struct:
将一组变量组合成的一个变量;
值类型,继承自System.ValueType类;
分配在堆栈上,本身存储的是值(与基本类型类似);
不可以设置为null;
作为函数参数时,传递的是值;
定义字段时不可以初始化;
无参构造函数不可以有;
可以不用new实例化;
不支持多态和继承,但可以有接口;
Class:
自定义的数据类型,包含字段,属性,方法,构造函数,操作符等;
引用类型,承自System.Object类;
堆栈上存放实例在托管堆中的地址,值存在托管堆上;
可以设置为null;
作为函数参数时,传递的是引用;
定义字段时可以初始化;
无参构造函数可以有;
必须new实例化;
支持多态和继承;
优化:1、struct在栈中不产生GC,class在堆中会产生GC。
2、堆栈的空间有限,大量的逻辑对象时创建类;轻量的对象用结构,只是数据时也用结构;