Я работаю над проектом обработки изображений. В моем приложении я обрабатываю по одному изображение из папки (я обрабатываю изображения в цикле while), папка содержит более 1000 изображений. Я использую сбор мусора (GC.Collect()) для каждых 4 отсчетов изображения. после обработки 1000 изображений, я получаю OutOfMemoryException
(исключение пройдет, когда растровое изображение назначает изображение), как решить эту проблему?Как решить OutOfMemoryException в C#
ответ
Это зависит от того, как вы используете изображения. Скорее всего, вы не распоряжаетесь соответствующим экземпляром. Попробуйте обернуть свои экземпляры в операторе using:
using (var image = ...new instance created...)
{
// ...do stuff...
}
Ищите утечки памяти. Вы можете использовать WinDbg с командой gcroot. См. Ссылку ниже.
Вы должны исследовать подозреваемых. Вы можете использовать расширение отладки SOS. Следующая команда даст вам список экземпляров класса в памяти и их адреса:
!DumpHeap -type LeakingClass
Затем вызовите GCRoot с адресом и посмотреть, что прикрепляет объект в памяти:
!GCRoot <your address here>
Вы может скопировать вставку адреса из результатов команды DumpHeap.
Ничего. Это нормально, чтобы получить эти исключения, не делая ничего плохого. Большая проблема с кучей остается нерешенной проблемой.
Ваш лучший шанс открыть отдельный процесс, который работает с изображениями, пока он не закончится (затем перезапустите его) под управлением вашего основного приложения и/или переместится на 64 бит (большее пространство делает проблемы с фрагментацией менее вероятными) ,
исключения, когда воля через растровое изображение присваивание PictureBox
Это требует много памяти в одном фрагменте. Расскажите нам об этих изображениях? Насколько они велики? Почему picturebox (пакетная обработка обычно не требуется для просмотра изображения). Как бы то ни было, это проблема, и если ваши изображения большие, ее можно ожидать.
один размер изображения 1MB (растровое изображение) –
Вы имеете в виду 1mb в памяти или на диске? Каков размер памяти? 1 мб в памяти не проблема, изображение размером 1 мб на диске может составлять сотни мб в памяти, а затем вы сталкиваетесь с проблемой фрагментации. Проверьте пример http://connect.microsoft.com/VisualStudio/feedback/details/521147/large-object-heap-fragmentation-causes-outofmemoryexception для примера проблемы. – TomTom
- 1. C# OutOfMemoryException
- 2. Ручка "OutofMemoryException" в C#?
- 3. C# OutOfMemoryException в массиве
- 4. OutOfMemoryException в C#
- 5. C# ThreadPool - OutOfMemoryException
- 6. OutOfMemoryException многопоточность C#
- 7. OutOfMemoryException в C# MultiThreading Environment
- 8. C# OutOfMemoryException Image.Save
- 9. C# Pen выбрасывает OutOfMemoryException
- 10. C# MongoDB Driver OutOfMemoryException
- 11. OutOfMemoryException
- 12. C# Общий список foreach OutofMemoryException
- 13. Получение OutOfMemoryException в Xamarin
- 14. OutOfMemoryException в StringWriter.ToString()
- 15. EntityFramework. OutOfMemoryException
- 16. OutOfMemoryException ошибка
- 17. OutOfMemoryException в C# при десериализации файла XML
- 18. Отладка outofmemoryexception
- 19. C# DbDataReader populating Результат списка в OutOfMemoryException
- 20. .NET OutOfMemoryException
- 21. Как заставить OutOfMemoryException в .Net
- 22. как решить system.outofmemoryexception в C#
- 23. как решить это в C?
- 24. Как решить C2054 в C
- 25. OutOfMemoryException с MemoryStream()
- 26. ImageView OutofMemoryException
- 27. Как работает функция OutOfMemoryException?
- 28. OutOfMemoryException в письме MemoryStream
- 29. Как исправить WatiN OutOfMemoryException
- 30. Как исправить OutOfMemoryException для PerformanceCounterCategory.GetInstanceName
Какая функция генерирует ошибку? – Gabe
исключение пройдет, когда растровое изображение присваивает картинке –
Вы никогда не должны использовать GC.Collect() .., особенно не в циклах. Это может вызвать проблемы, модернизировать все ваши поколения объектов и просто делает GC бесполезным вообще. Это даже может вызвать проблему ... См. Другие решения, указанные ниже, и удалите метод сбора –