2023-03-28
编程语言
00

目录

概念
装箱拆箱可能带来的性能问题
如何避免装箱拆箱

概念

  • 装箱:值转引用,把值类型用引用类型存储,栈内存上的数据会迁移到堆内存中,并返回一个对该对象的引用。
  • 拆箱:引用转值,把引用类型存储的值还原为值类型,堆内存会迁移到栈,可能还会进行类型转换。

在不确定类型时使用装箱拆箱,可以方便我们进行参数的存储和传递

装箱拆箱可能带来的性能问题

  • 装箱需要在堆上分配内存,并且要拷贝数据。
  • 拆箱需要从堆中提取数据,并进行类型转换。
  • GC 压力增加,因为装箱产生的对象需要由 GC 管理。

如何避免装箱拆箱

  • 使用泛型,避免object作为参数或者集合存储类型
  • 在不确定类型的时候,使用isas进行安全的类型判断,再进行转换
  • 自定义结构体的ToString()也可能导致装箱,C#中自定义结构体没有重写ToString虚方法的话,就会导致装箱

本文作者:xuxuxuJS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!