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
,
1 ответ
Вы не можете справиться OutOfMemoryException
как обычный. Причина, по которой вы можете справиться с этим, заключается просто в том, чтобы каким-то образом сохранить состояние приложения, чтобы предоставить потребителю вашего приложения способ восстановить потерянные данные. Я имею в виду, что нет смысла называть GC.Collect
или что-то еще, потому что приложение все равно умрет, но CLR
пожалуйста, сообщите вам об этом раньше.
Таким образом, чтобы решить эту проблему, проверьте потребление памяти вашего приложения, что на 32bit
машина должна быть о чем то 1.2GB
оперативной памяти или управляйте количеством элементов в имеющихся коллекциях, которое не может превышать, для обычного списка, 2 ГБ памяти на 32-битной и на 64-битной тоже.