基元类型
基元类型
编译器直接支持的数据类型 e.g. int byte等- 表达式中如果都是字面值,编译时就会完成表达式求值,从而提高性能
引用类型和值类型
- 非托管代码C/C++中定义类型后,使用该类型的代码决定在哪分配实例。而在托管代码中由定义类型的人员决定在哪分配实例。
- 设计值类型应当考虑
实参、返回值
均会设计值类型字段拷贝,造成性能损失。 - 将值类型变量复制给另一个值类型变量,将会逐字段复制
- CLR会控制类型字段的布局,引用类型默认StructLayoutAttribute.Auto,值类型默认StructLayoutAttribute.Sequential(保持定义时的顺序)。
如果值类型不与非托管代码互操作设置为StructLayoutAttribute.Auto将会又更好的性能
。
值类型的装箱和拆箱
- 值类型如果没实现ToString,在调用ToString时会进行装箱
建议
将值类型字段标记为readonlyReferenceEquals
检查同一性,2个引用指向同一个对象- 值类型基类ValueType的Equals方法利用反射,所以定义自己的结构体时,应当自定义Equals方法,以提高比较性能。根据需要实现
IEquatable<T>、==、!=、IComparable、IComparable<T>、<, <=, >, >=
- 重写
Equals
还需要重写GetHashCode
对象哈希码
- Object 或 ValueType 的 GetHashCode 方法性能都不高
dynamic 基元类型
- 用到的比较少、占个坑