2013-01-05 163 views
0

它是如何工作的,必須:OutOfMemoryException異常處理和Windows Media Player SDK

WindowsMediaPlayer windowsMediaPlayer = new WindowsMediaPlayer(); 
IWMPMediaCollection collection = windowsMediaPlayer.mediaCollection; 
IWMPMedia newMedia = collection.add(path); //causes OutOfMemoryException after some thousands method's iterations 

我試圖避免這樣說:

try 
{ 
    newMedia = collection.add(path); 
    return newMedia; 
} 
catch (Exception) 
{ 
    collection = null; 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
    WindowsMediaPlayer windowsMediaPlayer = new WindowsMediaPlayer(); 
    IWMPMediaCollection collectionNew = windowsMediaPlayer.mediaCollection; 
    return CreateNewMedia(collectionNew, path); 
} 

但是,這並不工作 - 我仍然得到無限的例外循環內catch

+0

堆棧跟蹤將是有用的 –

+1

這是'CreateNewMedia'方法?所以這個操作會拋出一個'Exception'並且你正在遞歸地重試它呢?如果第一次失敗,爲什麼它會在第n次運行? –

+0

是的,這是一個循環。執行失敗超過2000次。所以我試圖釋放記憶。 –

回答

0

您不能像普通的那樣處理OutOfMemoryException。您可能需要處理該問題的原因在某種程度上是爲了保存應用程序的狀態,以便爲應用程序的使用者提供恢復丟失數據的方法。 我的意思是,有沒有意義調用GC.Collect或什麼的,導致應用程序將會死反正,但CLR之前好心給你有關的通知。

因此,要解決此問題,請檢查您的應用程序的內存消耗,這32bit機器上必須是一些有關的RAM 1.2GB,或控制您的集合元素的數量,不能超過,普通列表,32bit上的2GB內存以及64bit上的