我正在将多个多图像 tiff 文件连接到单个多图像 tiff 文件,但在删除源 tiff 文件时遇到问题,因为 Image 类继续控制它们。
我正在通过 Image.FromFile 读取 tiff 图像:
Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile);
之后我以相同的方式读取所有其他 tiff 图像并将它们附加到生成的 tiff 图像。
完成后,我使用此代码释放引用并保存生成的文件:
ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush);
resultTiff.SaveAdd(ep);
resultTiff.Dispose();
现在的问题是文件句柄仍然存在(因此无法删除文件),除非我在resultTiff.Dispose()
调用。
你可以想象我调用GC的感觉不是很舒服,那么有没有其他方法可以实现呢?
最佳答案
解决 Image.FromFile
问题的最佳方法是使用 Image.FromStream
代替。
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (Image original = Image.FromStream(fs))
{
...
在垃圾回收发生之前,使用显式 Dispose()、using() 语句或将值设置为 null 无法解决问题。强制进行垃圾回收通常不是一个好主意。
关于c# - 使用 Image.FromFile 不会释放文件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649308/