【问题标题】:BitmapEncoder MemoryLeak with SoftwareBitmapBitmapEncoder MemoryLeak with SoftwareBitmap
【发布时间】:2016-02-20 19:34:11
【问题描述】:

我使用BitmapEncoder 类将捕获的摄像机视频帧转换为流。当使用 DispatcherTimer 在循环中执行此操作时,我的应用程序会逐渐泄漏内存,但从未恢复任何内存。

我使用thisMicrosoft 示例作为基础。

泄露的实际代码。

var previewProperties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;
using (var videoFrame = new VideoFrame(BitmapPixelFormat.Rgba16, (int)previewProperties.Width, (int)previewProperties.Height))
{
    using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
    {
        using (var currentFrame = await _mediaCapture.GetPreviewFrameAsync(videoFrame))
        {
            // Collect the resulting frame
            using (SoftwareBitmap previewFrame = currentFrame.SoftwareBitmap)
            {

                BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
                //MEMORY LEAK
                encoder.SetSoftwareBitmap(previewFrame);
                await encoder.FlushAsync();

                //DO something with the stream
            }
        }
    }
}

【问题讨论】:

  • 你有什么问题?
  • 当然如何防止内存泄漏
  • @Freggar:您没有证据证明存在内存泄漏。至少尝试手动强制 GC.Collect 并 waitForFinalization 看看是否有任何内存释放。请记住,.net 应用程序仅在存在内存压力时才会触发垃圾收集器并释放内存。
  • 别猜了,找个内存分析器,看看哪些对象没有被释放,哪些对象保存在内存中。

标签: c# .net memory-leaks windows-store-apps win-universal-app


【解决方案1】:

在更加努力地搜索并浏览 MSDN 论坛后,我发现了一个 MSDN thread 与完全相同的问题。这是 Visual Studio 中的一个错误,只会在调试应用时影响它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多