【发布时间】: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