0

Я использую класс BitmapEncoder для преобразования захваченного видеофрагмента камеры в поток. Когда это делается в цикле с помощью DispatcherTimer, мое приложение постепенно теряет память, но не восстанавливает ее.BitmapEncoder MemoryLeak с SoftwareBitmap

Я использовал this Microsoft образец как основа.

Фактический код, который протекает.

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 
      } 
     } 
    } 
} 
+0

В чем вопрос? –

+0

Как предотвратить Memoryleak, конечно, – Freggar

+0

@Freggar: У вас нет доказательств утечки памяти. По крайней мере, попробуйте принудительно принудительно выполнить GC.Collect и waitForFinalization, чтобы узнать, есть ли релиз памяти. Имейте в виду, что приложения .net запускают сборщик мусора и освобождают память только при наличии давления памяти. – CharithJ

ответ

0

После поиска тверже и просматривая на форумах MSDN я нашел MSDN thread с точно таким же вопросом. Это ошибка в Visual Studio и влияет только на приложения при их отладке.