gpt4 book ai didi

ios - 文件句柄类将整个文件加载到内存中

转载 作者:行者123 更新时间:2023-11-29 05:40:13 25 4
gpt4 key购买 nike

我正在尝试按顺序从大文件中读取数据。由于文件可能大于可用内存,因此我不希望文件完全加载到内存中。

class RecordImporter {     

func `import`(url: URL) {
guard let reader = RecordReader(url: url) else { return }
self.resume(from: reader)
}

private func resume(from reader: RecordReader) {
while let _ = reader.nextData() {

}
//Checking memory here is about 300Mb, the test file size.
return
}
}
class RecordReader {   

private var fileHandle: FileHandle

init?(url: URL) {
do {
self.fileHandle = try FileHandle(forReadingFrom: url)
}
catch {
return nil
}
}

func nextData() -> Data? {
let data = self.fileHandle.readData(ofLength: 10000)
guard !data.isEmpty else { return nil }
return data
}
}

完成 while 循环后,内存约为 300Mb,即使我以 10Kb block 的形式读取数据。

由于某种原因, block 没有被释放。

enter image description here

知道会发生什么吗?

最佳答案

在将数据的使用包装在自动释放池中之前,我曾尝试过,例如:


func nextData() -> Data? {
let data = autoreleasepool  {
let data = self.fileHandle.readData(ofLength: 10000)
guard !data.isEmpty else { return nil }
return data
}
return data
}
}

我没有意识到的是,阅读 Action 需要在里面:

autoreleasepool  {
while let data = reader.nextData() {
print(data.count)
}
}

这可以正常工作。感谢马丁的提示。

关于ios - 文件句柄类将整个文件加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com