Vb.net 使用PictureBox控件时清除内存

Vb.net 使用PictureBox控件时清除内存,vb.net,memory,picturebox,Vb.net,Memory,Picturebox,我有一个树状视图,当你点击一个节点时,代码会得到该节点的标签,然后在PictureBox控件中显示一张图片。在点击了这么多之后,我收到了一条控制台消息: A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll 此后,PictureBox中将不再加载更多图片。在加载新图像之前,我已尝试在PictureBox上使用Dispose,但是图像没有显示在PictureBox

我有一个树状视图,当你点击一个节点时,代码会得到该节点的标签,然后在PictureBox控件中显示一张图片。在点击了这么多之后,我收到了一条控制台消息:

A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll
此后,PictureBox中将不再加载更多图片。在加载新图像之前,我已尝试在PictureBox上使用Dispose,但是图像没有显示在PictureBox中。下面的代码就是我使用的全部代码

pbMainTools.Image = Image.FromFile(strImagePath & ".jpg")
我还使用节点中的标记从DataTable获取图像的路径:

For Each NewTool As DataRow In NTDS.Tools.Select("ToolID = " & tvTag)
     strImagePath = NewTool.Item("Image")
Next

如果您使用了
PictureBox.Dispose()
,那么您将丢弃整个控件,使其无法使用(因此无法显示图像)。要仅处理映像,请执行以下操作:

pbMainTools.Image.Dispose()

请注意,这并不一定会阻止应用程序抛出一个
OutOfMemoryException
,因为一个原因可能是图像太大,GDI+无法加载到内存中。

所有图像都显示良好,只有在点击过多图像后才会发生。所以我假设当你加载它的时候,它会把所有的图像都保存在内存中。@xRuhRohx:是的,我理解。我刚刚指出,
OutOfMemoryException
也可能由其他问题引起,因此您知道,如果
PictureBox.Image.Dispose()
不起作用(我认为它不起作用?)。在将这批照片添加到应用程序之前,我忘记了调整其大小。我缩小了尺寸,现在没有问题了。所以你说图像太大让我想起我忘了这么做。它们就像5000x4000,而其他所有的都是1400x1050。@xRuhRohx:有时候人们会忘记简单的事情;)。很高兴我能帮忙!