Утечка памяти в Microsoft ENcoder SDK
Я использую EE4 и каждый раз звоню _deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(picBox, picBox.Handle));
использование памяти увеличивается примерно на 60 МБ. Проблема в том, что когда я закрываю форму и располагаю все ресурсы на _job
а также _devicesource
система не освобождает память... даже если я позвоню CG.collect();
система все еще использует те 60 МБ, делающие что-то. Проблема еще хуже, если я попытаюсь вызвать форму несколько раз. В какой-то момент я получаю ошибку "Недостаточно памяти", потому что использование памяти постоянно увеличивается. Любое предложение? Я проверяю образцы SDK, и во всех случаях проблема сохраняется. Итак, мой вопрос: это ошибка?
2 ответа
Виноват...! Я не правильно распорядился всеми ресурсами:
_deviceSource.PreviewWindow = null;
_job.RemoveDeviceSource(_deviceSource);
_deviceSource.Dispose();
освобождает все ресурсы памяти, используемые на видео.
Я столкнулся с той же проблемой сегодня. Я обнаружил, что конкретно вам нужно позвонить source.PreviewWindow.Dispose()
перед звонком job.RemoveDeviceSource(source)
:
// The order in which we remove, dispose, and set null is very important.
// Anything less creates a huge memory leak.
// 1st Stop Encoding
job.StopEncoding();
// 2nd, Must Dispose the Preview Window
// Before Calling Job.RemoveDeviceSource << Absolutely
source.PreviewWindow.Dispose();
source.PreviewWindow = null;
// 3rd, Remove the Source
job.RemoveDeviceSource(source);
// 4th, Dispose the Source
source.Dispose();
source = null;
// 5th, Dispose the Job
job.Dispose();
job = null;