Управление памятью фоновых задач Windows Phone 8.1

фоновая задача в Windows Phone 8.1 имеет ограниченную память 40 МБ. Для загрузки мультимедиа на сервер или связанных с этим задач 40 МБ — это гораздо меньше.

Например: я вызываю приведенную ниже функцию из метода RUN TimerTriggerTask.

    private async void AccessMediaUpload()
    {
        try
        {
            // SavedPictures can be used for working with emulators
            StorageFolder picfolder = KnownFolders.CameraRoll;
            var x = await picfolder.GetFilesAsync();

            var enumerator = x.GetEnumerator();

            Debug.WriteLine("Number of files are: " + x.Count);

            while (enumerator.MoveNext())
            {
                var file = enumerator.Current;

                // Setup the the uploader with the name of the file
                var uploader = new BackgroundUploader();
                uploader.SetRequestHeader("Filename", file.Name);

                // Start the upload
                UploadOperation upload = uploader.CreateUpload(uri, file);
                await upload.StartAsync();

                // Get the HTTP response to see the upload result
                ResponseInformation response = upload.GetResponseInformation();
                if (response.StatusCode == 200)
                {
                    Debug.WriteLine(file.Name + " Uplaoded");
                }
                //Debug.WriteLine("HTTP Status Code:" + response.StatusCode);
            }
            _deferral.Complete();
        }

        catch (OutOfMemoryException e)
        {
            Debug.WriteLine(e.Message);
        }
    }

Если у меня есть около 10 изображений для загрузки, оно исчезает после 4 изображений из-за OutOfMemoryException.

Есть ли способ обрабатывать память здесь? Обратите внимание, что я использую сетевой API фоновой передачи, который сам выполняет все фрагменты файлов.


person golldy    schedule 03.10.2014    source источник
comment
Пробовали ли вы профилировать свою фоновую задачу, чтобы увидеть, что занимает так много памяти?   -  person Decade Moon    schedule 04.10.2014
comment
Я использовал электроинструменты Windows Phone. Он превышает 40 МБ, и вот тогда фоновая задача умирает.   -  person golldy    schedule 06.10.2014


Ответы (2)


Не ждите результата загрузки.

Все, что вам нужно сделать в BackgroundTask, — это начать загрузку. В этот момент вы передали его BackgroundTransfer для управления за вас. Смысл BackgroundTransfer состоит в том, чтобы обрабатывать вашу загрузку вне вашего приложения, она будет загружаться, когда ваше приложение приостановлено, и может даже продолжаться после перезагрузки телефона.

В вашем случае обработка в цикле, не дожидаясь, когда вы просто начнете обрабатывать следующий файл. Если вы хотите вывести сообщение об успехе, используйте обратный вызов Progress.

person Michael Smith    schedule 27.11.2014

Привет, Голди, я думаю, что это лучше всего дождаться завершения загрузки, потому что, если вы выполняете фоновую задачу, пользователь может удалить изображение или добавить другое, и у вас могут возникнуть проблемы в будущем. Затем вы можете заблокировать экран с помощью индикатора выполнения или того же, чтобы пользователь дождался завершения этого процесса, я думаю, это более правильно! Удачи!

PD: Извините за добавление ответа, но у меня нет репутации для добавления комментариев, извините, Голди и админы!

person Merlí Escarpenter Pérez    schedule 06.10.2014