Je tente de créer une fonction de masque de données.Best Data get/set uint8 à l'index/Masquage des données
J'ai trouvé deux façons:
en utilisant les indices de données
- très lent
tableau création à partir des données, les modifier puis reconvertir
- ~ 70 fois plus rapide
- utilise 2 fois plus de mémoire
Pourquoi subscripting données est si lent? Existe-t-il un meilleur moyen d'obtenir/définir uint8 à l'index sans dupliquer la mémoire?
voici mon test:
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