Утечка памяти в 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;
Другие вопросы по тегам