0

它必须如何工作:

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

4

1 回答 1

0

你不能OutOfMemoryException像普通的那样处理。您可能需要处理这个问题的原因只是,在某种程度上,为了保存应用程序的状态,以便为您的应用程序的使用者提供一种恢复丢失数据的方法。我的意思是没有任何意义调用或其他什么,因为应用程序无论如何GC.Collect都会死,但请在此之前通知您。CLR

所以要解决这个问题,检查你的应用程序的内存消耗,32bit机器上的内存必须是1.2GB内存,或者控制你拥有的集合中元素的数量,对于普通列表,不能超过 2GB 的内存32位64位也是。

于 2013-01-05T22:47:02.603 回答