быстрое увеличение объема памяти в URLSession URLSessionDataTask - PullRequest
0 голосов
/ 26 июня 2019

Я выполняю запросы в цикле и вижу, что использование памяти становится неограниченным

Я думаю, что URLSessionDataTask объекты не освобождаются URLSession

Мой код выглядит так

let base = "http://myserver.com"

let group = DispatchGroup()

// 10 requests in parallel
let semaphore = DispatchSemaphore(value: 10)

func request(s: String) {
  var c = URLComponents(string: base)!
  c.queryItems = [URLQueryItem(name: "uid", value: s)]
  let url = c.url!

  var request = URLRequest(url: url)
  let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
    semaphore.signal()
    if let data = data {
      let json = String(data: data, encoding: .utf8)
      print("\(url) \(String(describing: json))")
    }
  }
  semaphore.wait()
  dataTask.resume()
}



// file with million ids
let fileName = "ids.txt"


let contents = try String(contentsOfFile: fileName)
let lines = contents.components(separatedBy: .newlines)

lines.forEach { (s) in
  request(s: s) // make a request for each
}

EDIT

По комментариям я пытался обернуть с autorelease, но все еще имеет рост памяти

lines.forEach { (s) in
    autoreleasepool {
      request(s: s)
    }
  }
...