【问题标题】:Slower operations on Array<SomeStruct> than on Array<SomeClass>... Why?Array<SomeStruct> 上的操作比 Array<SomeClass> 上的操作慢...为什么?
【发布时间】:2015-07-30 23:53:19
【问题描述】:

我在这里做了一些比较: https://github.com/itchingpixels/structs-vs-classes 似乎将结构插入结构数组比将类插入类数组(具有相同数据)慢 10 倍。

我的测试有问题吗?

这可能是什么原因? 或者..这是预期的吗?

【问题讨论】:

  • 嗯,结构可能必须被复制......但你已经知道了。为什么不使用 Instruments 并找出时间都花在了哪里?
  • 是的,好主意,谢谢!

标签: arrays swift struct


【解决方案1】:

预期。类使用引用(4-8 字节内存地址);结构是值类型,因此必须内联整个结构。尝试使用一个很小的结构,而不是一个大小为数百字节的结构。尝试在数组末尾而不是开头插入。

【讨论】:

  • 感谢您的回复,我想知道为什么在末尾插入和开头插入会有什么不同?
  • 你能发布你的测试代码和结果,作为讨论的基础吗?我认为在开头插入会导致所有内容都被移动——本质上是将数组复制到右侧一个元素以腾出空间。
  • 这很深入,是一个重量级的 Q/A,但这是一个有一年历史的问题,所以编译器从那时起已经进步了很多:stackoverflow.com/questions/24101718/…
  • 我在这里分享了测试/代码:github.com/itchingpixels/structs-vs-classes。我也会用更小的结构做更多的测试。如果我使用结构作为我的主要模型对象,我对速度改进很感兴趣,并且我知道这样做的各种好处 - 但我不知道它们在排序时可能会变慢(这只是稍慢)或在特定索引处插入(这要慢很多很多)。我错过了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2018-12-08
  • 2021-08-28
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多