Широкое использование памяти при загрузке ресурсов (изображений, видео) в Firebase в Swift? - PullRequest
0 голосов
/ 01 июня 2018

Предположим, у меня есть массив UIImage с именем photos, они должны быть загружены в хранилище Firebase.Я хочу сделать следующие вещи:

  1. Загрузить их в хранилище Firebase

  2. Получить пути к загруженным фотографиям и сохранить их в массиве с именем uploadedAssets ( paths , не скачать URL, это выглядит так: "photos / folder_name / photo_id"), где "folder_name" генерируется случайным образом, а "photo_id" - целое число, представляющее порядок фотографий

  3. Вызовите функцию Cloud и передайте ей uploadedAssets.Затем сервер использует пути для поиска всех изображений и создает миниатюру для каждого из них.

  4. Наконец, сохраните исходные фотографии для загрузки и ссылки для загрузки миниатюр в базе данных.

У меня есть кое-что, что работает, но использует слишком много памяти (300 + МБ при загрузке только 4 изображений):

// Swift
let dispatchGroup = DispatchGroup()
let dispatchQueue = DispatchQueue.init(label: "AssetQueue")

var uploadedAssets = [String]()
let folderName: String = UUID().uuidString

dispatchQueue.async {
    for i in 0..<photos.count {
        dispatchGroup.enter()

        let photo: UIImage = photos[i]
        let fileName: String = "\(folderName)/\(i)"
        let assetRef = Storage.storage().reference().child("photos/\(fileName)")
        let metaData = StorageMetaData()
        metaData.contentType = "image/jpg"

        if let dataToUpload = UIImageJPEGRepresentation(photo, 0.75) {
            assetRef.putData(
                dataToUpload,
                metaData: metaData,
                completion: { (_, error) in
                    uploadedAssets.append("photos/\(fileName)")
                    dispatchGroup.leave()
                }
            )
        }
    }
}

dispatchGroup.notify(queue: dispatchQueue) {
    Alamofire.request(
        "https://<some_url>",
        method: .post,
        parameters: [
            "uploadedAssets": uploadedAssets
        ]
    )
}

И код, который генерирует эскизы, запускается на стороне серверапоэтому, на мой взгляд, не имеет значения, я не буду размещать это здесь.Таким образом, приведенный фрагмент кода потребляет 300 + МБ памяти, когда нужно загрузить 4 фотографии.После успешной загрузки этих фотографий использование памяти остается на уровне 300 + МБ и никогда не падает.Когда я пытаюсь загрузить больше, скажем, еще 4 фотографии, он может даже подняться до 450 МБ.Я знаю, что это не нормально, но не могу понять, почему это произошло?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...