我正在构建一个游戏中时光倒流的通用应用程序,它以指定的间隔捕获一系列照片。在我的计时器刻度事件中,我正在捕获图像并将其保存到这样的存储文件中:
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);
}
答案 0 :(得分:0)
所以我想出了如何解决这个问题!
显然,内存泄漏与音频驱动程序有关。如果像这样初始化MediaCaptureManager,泄漏就会消失。
var mediaSettings = new MediaCaptureInitializationSettings
{
PhotoCaptureSource = PhotoCaptureSource.Auto,
StreamingCaptureMode = StreamingCaptureMode.Video,
AudioDeviceId = string.Empty
};