【问题标题】:Find picture taken out of memory issue查找图片内存不足问题
【发布时间】: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


【解决方案1】:

我很确定您在即时窗口中看到了这些消息,可能是因为默认情况下您已在工具 - 选项... - 调试 - 常规中设置选项将所有输出窗口文本重定向到即时窗口。这就是为什么当您在即时窗口中单击鼠标右键时,您看不到任何禁用消息的选项。它是输出窗口文本,因此您需要在输出窗口中设置它。所以只需打开输出窗口,右键单击并从上下文菜单中取消选中异常消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2019-03-18
    • 2013-08-07
    • 2015-04-15
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多