У меня проблемы с памятью, считывание и закрытие нескольких изображений в формате JPG.У меня проблемы с памятью при чтении и закрытии нескольких изображений JPG
я загружаю JPG файлы в объект изображения, считывают информацию о файле (размер, размеры, даты и т.д.), и читать свои данные EXIF, чтобы получить геокод для Lat/Long. Затем я передаю информацию объекту ListView. Все это отлично работает в папках с до 60 или более JPG. После того, как я пройти определенное количество (не уверен, что порог на самом деле) я получаю мою любимую ошибку ...
************** Exception Text *** *********** System.OutOfMemoryException: Недостаточно памяти. в System.Drawing.Image.FromFile (String filename, Boolean useEmbeddedColorManagement) в System.Drawing.Image.FromFile (String filename)
... и т. д.
Я где-то утеплю память, но я немного новичок с приложениями .NET. Я вызываю эту процедуру из цикла, который читает коллекцию JPG-файлов в каталоге.
Public Function JPGDat(ByRef jpg As FileInfo) As ListViewItem
Dim filEntry(6) As String
Dim lstEntry As ListViewItem = Nothing
Dim pic As Image = Image.FromFile(jpg.FullName) 'HERE IS WHERE WE CRASH
filEntry(0) = jpg.Name
filEntry(1) = (Math.Round(jpg.Length/1024)).ToString() 'File Size
filEntry(2) = Format(pic.PhysicalDimension.Width, "0") 'Pixel width dimension
filEntry(3) = Format(pic.PhysicalDimension.Height, "0") 'Pixel height dimension
Try
Dim CLatt As Double = GetCoord(pic.GetPropertyItem(2)) 'Get Latitude from EXIF
Dim CLong As Double = GetCoord(pic.GetPropertyItem(4)) 'Get Longitude from EXIF
filEntry(4) = Format(CLatt, "0.000000000000000")
filEntry(5) = Format(CLong, "0.000000000000000")
Catch ex As Exception
filEntry(4) = ""
filEntry(5) = ""
End Try
filEntry(6) = "Date: " + Format(jpg.CreationTime, "yyyy-MM-dd")
lstEntry = New ListViewItem(filEntry)
If filEntry(4) <> "" Then
lstEntry.Checked = True
End If
pic.Dispose()
Return lstEntry
End Function
В какой памяти диспетчер задач сообщает, что ваш процесс используется непосредственно перед его сбоем? – Dai
Просто потому, что именно здесь происходит исключение OOM, это не значит, что это проблема. Вам нужно будет профилировать приложение, чтобы найти утечку. – user1620220
Приношу свои извинения людям. Ошибка была в поврежденном файле JPG ... а не в коде. Еще одна попытка Try решила проблему. –