ファイルからデータを読み取っているときにメモリリークが発生しています。ファイルハンドルからデータを読み取ると、Linuxのメモリがリークする
func read() throws {
let url = URL(fileURLWithPath: "content.pdf")
let fileHandle = try FileHandle(forReadingFrom: url)
while true {
let chunk = fileHandle.readData(ofLength: 256)
guard !chunk.isEmpty else {
break
}
}
print("read")
}
do {
for _ in 0 ..< 10000 {
try read()
}
}
catch {
print("Error: \(error)")
}
* FYI:あなたの作業ディレクトリに「content.pdf」ファイルを持っている必要がありますこのコードを実行するには、このコードでは、リークを作成します。
これをLinux上でSwift 3.1.1(または3.1)と一緒に実行すると、プロセスが終了するまでループの繰り返しが多く消費されます。
これは、データがAutoreleaseプールに入れられているために発生します。自動解放プールで各繰り返しをラップすることでメモリの問題を解決できますが、Linuxには存在しません。そのメモリをアップする。誰にもアイデアはありますか?
迅速なユーザーメールリストをご覧ください。うまくいけば、これが役に立ちます。 https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20161031/003823.html –
@LuisRamirezありがとう、私はすでに投稿する前にそれを見つけました。自動解放プールは、FileHandle/DataのLinux実装では使用されません。私はcorelibsコードを掘り下げ、究極のバグを発見し、回避策を考え出しました(下記)。 – drewag