0
Память достигла одной крайности, и приложение перестало работать. Я назвал Runcamera таймером. для разрешения 640 * 480, но проблема с 1920 * 1080. Что мне не хватает?Утечка памяти при захвате камеры для высокого разрешения
public void RunCamera()
{
imgWeb.Visibility = Visibility.Visible;
capture1.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1920);
capture1.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 1080);
currentFrame = capture1.QueryFrame();
imgWeb.Source = ToBitmapSource(currentFrame);
}
ToBitmapSource Defenition приведены ниже
public static BitmapSource ToBitmapSource(IImage image)
{
BitmapSource bs = null;
using (System.Drawing.Bitmap source = image.Bitmap)
{
try
{
IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap
bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ptr,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
DeleteObject(ptr); //release the HBitmap
}
catch (Exception ex)
{
GC.Collect();
GC.WaitForFullGCComplete();
}
return bs;
}
}
использования JetBrains dot Memory для профилирования вашего приложения. Или отладчик памяти Visual Studio Ultimate, или громоздкий WinDbg и http://thinkexception.blogspot.de/2010/06/tool-to-bompare-two-windbg-dumpheap.html и https://github.com/Seikilos/ MemComparer – Samuel
@Samuel thanks ... пока эти ссылки объясняют, как это происходит, о котором я уже знаю, я не нашел полезной для решения проблемы ... Я полностью меняю формат захвата, который решил проблему – Jagan