2013-07-01 3 views
0

EE4를 사용 중이고 _deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(picBox, picBox.Handle));을 호출 할 때마다 메모리 사용량이 약 60MB 증가합니다. 문제는 양식을 닫고 모든 자원을 _job_devicesource에 처분하면 시스템이 메모리를 해제하지 않는다는 것입니다 ... CG.collect();을 호출해도 시스템은 여전히 ​​그 일을 60MB 수행합니다. 양식을 여러 번 호출하려고하면 문제가 더욱 심각해집니다. 메모리 사용률이 지속적으로 증가하기 때문에 어느 시점에서 메모리 부족 오류가 발생합니다. 제안 사항이 있으십니까? SDK 샘플을 확인하고 모든 경우에 문제가 지속됩니다. 그래서 내 질문은 : 이것은 버그입니까?Microsoft ENcoder SDK 메모리 누수

+0

누수가 포함 된 타사 라이브러리와 가능성 복용 기본 영역 (관리되지 않는) 자원 장소, 관련 특히 비디오 및 될 가능성이 : 내가 특별히 당신이 job.RemoveDeviceSource(source)를 호출하기 전에 source.PreviewWindow.Dispose()를 호출 할 필요가 있음을 발견했다. 특정 정보가 없으면 조언을하기는 어렵지만 아마도 MS-1이 아닌 DLL이로드되었는지 확인해야합니다. '2'클린 Windows에서 문제가 발생합니까? –

+0

@Roman R. 감사합니다. 타사가 아닌지 확인합니다. 코덱을 사용하지만 다른 컴퓨터에서 동일한 결과를 얻으려고했습니다. PreviewWindow 속성을 실행할 때마다 양식이 완료되고 심지어 가비지 수집기가 호출 된 후에도 릴리스되지 않는 메모리 양을 볼 수 있습니다. 부모 폼을 활성 상태로 유지하면 비디오가로드되는 하위 폼을 호출 할 때마다 메모리 사용이 증가합니다. 필자는 Encoder 4를 사용하는 다른 예제를 동일한 결과로 테스트했습니다. – Timbolo

답변

0

내 실수 ...! 나는 정확하게 모든 자원을 폐기하지 않았다.

_deviceSource.PreviewWindow = null; 
_job.RemoveDeviceSource(_deviceSource); 
_deviceSource.Dispose(); 

은 비디오에 사용 된 모든 메모리 자원을 방출한다.

0

오늘 같은 문제가 발생했습니다.

// 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;