2 years ago
#76732
x670
NSData decompression taking too much time / slow
Basically I have simple Codable
struct I want to save to disk with compression using lz4
algorithm, which seems to be the fastest one. Compresses with no problem and very fast, takes 2 ms, but decompressing same data takes 1700 ms.
What's wrong?
struct MyDataStruct: Codable {
var subStructs: [SubStructData]
}
struct SubStructData: Codable {
var a: String = "a"
var b: String = "b"
var c: Int = 1
}
class DataExporter {
var compressedData = NSData()
func saveData() {
let encoder = JSONEncoder()
// Generate dummy data
var myDataStruct = MyDataStruct(subStructs: [])
myDataStruct.subStructs = (0...350_000).map { _ in
return SubStructData()
}
// Encode
let data = try! encoder.encode(myDataStruct) as NSData
print(".........rawData: \(data.count / 1_000) KB")
// Compress
let start = DispatchTime.now()
compressedData = try! data.compressed(using: .lz4)
let end = DispatchTime.now()
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000
print("..compressedData: \(compressedData.count / 1_000) KB, took \(timeInterval) ms.")
}
func loadData() {
// Decompress
let start = DispatchTime.now()
let decompressedData = try! compressedData.decompressed(using: .lz4)
let end = DispatchTime.now()
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000
print("decompressedData: \(decompressedData.count / 1_000) KB, took \(timeInterval) ms.")
}
}
saveData()
then loadData()
prints;
.........rawData: 8400 KB
..compressedData: 49 KB, took 1.910732 ms.
decompressedData: 8400 KB, took 1702.779161 ms.
ios
swift
compression
nsdata
0 Answers
Your Answer