Я имею дело с очень большими массивами в Swift и пришел к выводу, что они чрезвычайно медленны при добавлении элементов к нему.
Я наблюдаю за этимипроблемы, в основном, когда я использую массивы в Dictionary
.
ex: var array = [String : [String]]
Поэтому я решил сравнить очень простой array
тест с использованием игровой площадки, думая, что проблема возникла изarray
само по себе:
var arr = [Int]()
for i in 0..<1_000_000 {
arr.append(i)
}
Этот код может длиться вечно.Теперь тот же код в C # с реальным List
, даже не занимает секунду .
IList list = new List<int>();
for (int i = 0; i < 1000000; i++) {
list.Add(i);
}
Я знаю, что массивыв Swift нет списков, как на других языках, где у вас есть возможность выбрать ArrayList
, LinkedList
.Swift, перераспределяет каждый раз, когда вы добавляете новый элемент, и в основном помещает весь массив в более новое пространство большего размера.
Как мы можем решить эту проблему?
EDIT 1: Хэмиш отметил, что использование среды Xcode Playground - ужасная идея для отслеживания производительности.Он прав, Свифт arrays
так же быстр, как С #, когда не используется на игровой площадке.
РЕДАКТИРОВАТЬ 2: Проблемы с производительностью arrays
не из-за самого array
,но только при использовании arrays
внутри словаря .Смотрите ответы ниже.