【发布时间】:2014-03-16 18:41:04
【问题描述】:
为什么当我尝试对 1,000 多张图像进行排序时,我的代码会出现这些错误。但它可以完美地处理 5 张图像。
A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
源代码
Private Function FindDateTaken(ByVal strPicture As String) As String
FindDateTaken = Nothing
Try
Const DATE_TAKEN As Integer = &H9003
Dim dateTaken As String = ""
Using img As Image = Image.FromFile(strPicture)
If img.PropertyIdList.Contains(DATE_TAKEN) Then
Dim pitem As Imaging.PropertyItem = img.GetPropertyItem(DATE_TAKEN)
dateTaken = System.Text.Encoding.UTF8.GetString(pitem.Value, 0, pitem.Value.Length)
End If
End Using
Return dateTaken
Catch ex As Exception
lblError.Text = ex.Message
End Try
End Function
【问题讨论】:
-
您需要在以这种方式加载的每 50 到 100 个图像手动调用垃圾收集器。您正在做的是从文件中加载图像,将其转换为实际图像,然后仅读取一小部分数据。您会发现在不将其转换为图像的情况下读取所需的图像文件部分效率更高。
-
遵循@Adam Zuckerman 的建议,您可以使用 Microsoft 的 Windows API 代码包库读取多媒体属性。
标签: vb.net