Im пытается создать функцию маски данных.Лучшие данные get/set uint8 по индексу/маскирование данных
Я нашел два способа:
с использованием индексов данных
- очень медленно
создания массива из данных, изменить его, а затем преобразовать его обратно
- ~ 70 раз быстрее
- использует 2 раза больше памяти
Почему индексирование данных происходит так медленно? Есть ли лучший способ получить/установить uint8 по индексу без дублирования памяти?
вот мой тест:
var data = Data(bytes: [UInt8](repeating: 123, count: 100_000_000))
let a = CFAbsoluteTimeGetCurrent()
// data masking
for i in 0..<data.count {
data[i] = data[i] &+ 1
}
let b = CFAbsoluteTimeGetCurrent()
// creating array
var bytes = data.withUnsafeBytes {
[UInt8](UnsafeBufferPointer(start: $0, count: data.count))
}
for i in 0..<bytes.count {
bytes[i] = bytes[i] &+ 1
}
data = Data(bytes: bytes)
let c = CFAbsoluteTimeGetCurrent()
print(b-a) // 8.8887130022049
print(c-b) // 0.12415999174118