2013-07-01 38 views
0

我正在使用EE4,每當我撥打_deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(picBox, picBox.Handle));時,內存使用量增加約60 MB。問題是,當我關閉表格並處理_job_devicesource上的所有資源時,系統不會釋放內存......即使我打電話給CG.collect();,系統仍會使用這些60MB來執行某些操作。如果我嘗試多次調用表單,問題會更加嚴重。在某些時候,我得到內存不足錯誤,因爲內存利用率不斷增加。 有什麼建議嗎?我檢查了SDK示例,並且在所有情況下問題依然存在。所以我的問題是:這是一個錯誤?Microsoft ENcoder SDK內存泄漏

+0

泄漏很可能是與本地域(非託管)資源發生,尤其是視頻有關,還可能與涉及第三方庫。如果沒有具體的信息很難給出建議,但是你應該'''檢查什麼是非MS DLL加載'2'問題發生在乾淨的Windows –

+0

謝謝@Roman R.我會檢查任何非微軟編解碼器在電腦上,但我曾嘗試在不同的計算機上得到相同的結果。每次我執行PreviewWindow屬性時,我都能看到即使在表單完成Disposed和垃圾收集器被調用後也不會釋放的大量內存。如果我保持父表單處於活動狀態,則每次我調用裝入視頻的子表單時,內存利用率都會增加。我測試了一些其他使用Encoder 4的例子,結果相同。 – Timbolo

回答

0

我的錯誤...!我沒有正確處置所有資源:

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

釋放視頻上使用的所有內存資源。

0

今天我遇到了同樣的問題。我發現,特別是你有打電話job.RemoveDeviceSource(source)之前調用source.PreviewWindow.Dispose()

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