c# - 使用 Image.FromFile 不会释放文件句柄

标签 c# asp.net garbage-collection

我正在将多个多图像 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/

相关文章:

javascript - 从 JS 脚本释放浏览器内存

c# - 在类似 StringBuilder 的 C 模块中增加多少缓冲区?

c# - 查询- LINQ,2 个表,联合

c# - 如何判断对象是否已被垃圾收集

asp.net - Base64 字符串图像数据在 IE 中显示?

asp.net - 如何使用 ValueInjector 映射列表

asp.net - 通过Asp.net中的Button的CommandArgument传递多个参数

java - 一个类的类成员被垃圾收集,即使应用程序有对它的引用

java - 为了垃圾回收而避免创建对象是否仍然有意义?

C# 事件处理