Windows Phone 8.1 MediaCapture CapturePhotoToStorageFileAsync内存泄漏

时间:2015-01-04 19:44:06

标签: camera windows-runtime windows-phone-8.1 universal

我正在构建一个游戏中时光倒流的通用应用程序,它以指定的间隔捕获一系列照片。在我的计时器刻度事件中,我正在捕获图像并将其保存到这样的存储文件中:

StorageFile file = await appFolder.CreateFileAsync(IMAGE_FILE_ROOT, Windows.Storage.CreationCollisionOption.GenerateUniqueName);
ImageEncodingProperties imageProperties = ImageEncodingProperties.CreateJpeg();
await MediaCaptureManager.CapturePhotoToStorageFileAsync(imageProperties, file);
ImageFilePaths.Add(file.Path);
file = null;

在我的手机上以最高分辨率(低分辨率为140)成功捕获了大约30张图像后,我在CapturePhotoToStorageFileAsync方法上获得了Out of Memory异常。

我尝试将照片带到InMemoryRandomAccessStream,以便我可以消除StorageFile API的泄漏,但它仍然会泄漏。

我使用WinPhone Power Tools分析了内存利用率,并且在拍照时不断上升。

我能做些什么来解决这个问题吗?

更新:

以下是演示泄漏的测试代码:

for (int x = 0; x < 40; x++)
{
    using (IRandomAccessStream memoryStream = new InMemoryRandomAccessStream())
    {
        await MediaCaptureManager.CapturePhotoToStreamAsync(imageProperties, memoryStream);
    }

    await Task.Delay(1000);
}

1 个答案:

答案 0 :(得分:0)

所以我想出了如何解决这个问题!

显然,内存泄漏与音频驱动程序有关。如果像这样初始化MediaCaptureManager,泄漏就会消失。

var mediaSettings = new MediaCaptureInitializationSettings
 {
  PhotoCaptureSource = PhotoCaptureSource.Auto,
  StreamingCaptureMode = StreamingCaptureMode.Video,
  AudioDeviceId = string.Empty
 };