【问题标题】:Windows Phone 8.1 MediaCapture CapturePhotoToStorageFileAsync memory leakWindows Phone 8.1 MediaCapture CapturePhotoToStorageFileAsync 内存泄漏
【发布时间】:2015-03-02 09:42:58
【问题描述】:

我正在构建一个用于延时拍摄的通用应用程序,它以指定的时间间隔捕捉一系列照片。在我的计时器滴答事件中,我正在捕获图像并将其保存到这样的存储文件中:

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 方法上遇到内存不足异常。

我尝试只将照片发送到 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);
}

【问题讨论】:

  • 你能分享更多代码吗?它可能会有所帮助
  • 所以我每 2 秒在我的 WinPhone 应用程序中使用 MediaCapture API 拍照(以便稍后创建延时视频)。代码运行良好(拍摄照片并保存),但在拍摄了大约 30 张照片后,应用程序内存不足。
  • 我运行了 Windows Phone Power Tools 并对应用程序进行了内存配置文件,并且它不断消耗越来越多的内存,直到它崩溃。仅供参考,手机上有足够的免费存储空间来存放照片。
  • 为了尝试隔离泄漏,我分析了以下测试代码,并遇到了同样的问题: for (int x = 0; x
  • 另外,我尝试处理 MediaCaptureManager 并在拍照后重新初始化它,但泄漏仍然存在。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多