2 years ago

#76732

test-img

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

Accepted video resources