Swift数组vs ContiguousArray

我们都每天使用数组。 但是我们是否考虑过有效使用它们? 在这里,我将讨论一种技术,通过该技术,我们可以基于其中的Element改善数组的性能。

数组–理想元素

尝试在数组中使用值类型。 使用值类型时,优化器可以消除Array中大部分的开销,这些开销是处理数组支持NSArray的可能性所必需的。 通过使用没有引用类型的值类型,可以避免额外的保留,释放Array内部的流量。 但是要小心并考虑在使用大值类型与引用类型之间进行权衡。 您可以在此处了解更多信息。

ContiguousArray

ContiguousArray类型是一种特殊的数组,始终将其元素存储在内存的连续区域中。 如果数组的Element类型是类或@objc协议,并且您不需要将数组桥接到NSArray或将数组传递给Objective-C API,则使用ContiguousArray可能比Array效率更高,并且具有可预测的性能。 如果数组的Element类型是结构或枚举,则Array和ContiguousArray的效率应相似。

考虑以下课程。

 班级地址{ 
var street =“”
var city =“”
var state =“”;
 枚举AddressAttributes { 
凯斯街
凯斯城
案件状态
}
  func updateAttribute(值:字符串,属性:AddressAttributes){ 
开关属性{
case.Street:
街道=价值;
案例城市:
城市=价值;
大小写
状态=值;
}
}
}

我测量了将此类对象添加到Array和ContiguousArray所需的平均时间。 我采用了一个任意值(1000000),只是为了演示如何在更大范围内表现不同。

  func testPerformanceForClassArray(){ 
让地址=地址()
var数组:[地址] = []
自我衡量{
for _ in 0 .. <10000000 {
array.append(地址)
}
}
}
  func testPerformanceForClassContiguousArray(){ 
让地址=地址()
var数组:ContiguousArray = []
自我衡量{
for _ in 0 .. <10000000 {
array.append(地址)
}
}
}

10次​​跑步所需的平均时间,

数组:2.45s

ContiguousArray:0.47秒

这里的关键要点是,通过使用ContiguousArray数组而不是普通Array可以显着提高性能。

感谢您阅读🙂

https://www.linkedin.com/in/nitin-george-012b3517