正确处理未引用的映像而不进行垃圾回收C#
我有一个C#程序,它从目录中的图像创建位图列表。它将使用整个位图列表生成一个新图像,然后保存。当用户加载新目录以重复该过程时,位图列表将被清除并重新填充。位图在创建对象“新位图(路径)”时加载 当用户执行以下步骤时,出现了一个问题:正确处理未引用的映像而不进行垃圾回收C#,c#,image,bitmap,garbage-collection,C#,Image,Bitmap,Garbage Collection,我有一个C#程序,它从目录中的图像创建位图列表。它将使用整个位图列表生成一个新图像,然后保存。当用户加载新目录以重复该过程时,位图列表将被清除并重新填充。位图在创建对象“新位图(路径)”时加载 当用户执行以下步骤时,出现了一个问题: 从目录1加载图像 选择不保存,而是从目录2加载图像 试图通过覆盖目录1中的图像来保存 由于“GDI+中的一般错误”,程序无法保存,因为它仍在“使用”被覆盖的图像 从目录1加载的位图的原始列表确实被清除,然后用目录2的图像重新填充。但是,Bitmap.Save()拒绝
我很确定这个问题与保留位图有关,即使没有引用,否则为什么垃圾收集会解决这个问题?这是解决这个问题的正确方法,还是有一种“正确”的方法来处理C#中的位图?谢谢。您需要在
位图
实例上调用Dispose
。。所以他们释放了他们的文件句柄
var bitmap = new Bitmap(path_to_file);
// use it
bitmap.Dispose();
或者,由于Bitmap
继承自实现IDisposable
的Image
,因此可以执行以下操作:
using (var bitmap = new Bitmap(path_to_file)) {
// use it..
}
您是否通过位图.FromStream加载它们?你目前如何“处置”它们?通过调用
.Dispose()
?哦,对不起,我没有;我正在使用新位图(路径)。让我更新这个问题。我不是在打电话。Dispose();出于某种原因,我没有想到。哦,天哪,抱歉问了这么愚蠢的问题。我想我会自己回答的。。。除非你愿意。谢谢,我真不敢相信我忘了。我甚至在标题中使用了“dispose”一词。