【发布时间】:2017-02-18 21:42:11
【问题描述】:
我正在尝试创建数据掩码函数。
我找到了两种方法:
-
使用数据下标
- 很慢
-
从数据创建数组,改变它,然后将它转换回来
- ~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
【问题讨论】:
标签: arrays swift optimization nsdata mask