0
我有閱讀和關閉多個JPG圖像的內存問題。我有閱讀和關閉多個JPG圖像的內存問題
我加載的JPG文件轉換爲圖像對象,讀取文件信息(大小,尺寸,日期等),並閱讀他們的EXIF數據中獲取緯度/地理編碼長。然後我將這些信息推送給一個ListView對象。這對所有JPG格式的文件夾都很有用。有一次,我晃過了一定數量(不知道是什麼的門檻實際上是)我得到我最喜歡的錯誤...
**************異常文本*** *********** System.OutOfMemoryException: 內存不足。 System.Drawing.Image.FromFile(String filename,Boolean useEmbeddedColorManagement) at 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 2015-02-23 21:50:40
僅僅因爲這是OOM例外發生的地方,並不意味着問題出在哪裏。您需要對您的應用程序進行配置以查找泄漏。 – user1620220 2015-02-23 21:53:31
我對此表示歉意。該錯誤是在一個損壞的JPG文件...不是代碼。增加一個Try命令解決了這個問題。 – 2015-02-23 22:10:44