切片的性能优化

  1. 删除元素时,把空余位置置空,有助于垃圾回收

情况1:很小一部分不再使用(少见) 如 Go 语言高性能编程-Delete(GC)中给出了一段示例代码:

maxLen := len(a)
if i < maxLen - 1{
    copy(a[i:], a[i+1:]) // i+1到结尾的元素统一往前移动一格
}
a[maxLen-1] = nil // or the zero value of T
a = a[:maxLen-1]  // 最后一格切掉

slice-gc-delete 实际项目中,因为数组的删除时间复杂度是 O(n) ,如果遇到要频繁删除的场景,更好的解决方案是更换数据结构,比如 双向链表 list.List ,所以这个场景以了解为主。

情况2:长时间只使用切片数组中很小的片段 那么建议新建独立切片,复制需要的数据,使得原数组内存能被及时回收,降低内存占用。

  1. 一次性分配足够的内存,避免动态扩容:老生常谈,不在赘述
Copyright © CoffeeChat 2020 all right reserved,powered by Gitbook该文件修订时间: 2023-05-31 16:34:35

results matching ""

    No results matching ""