Gor*_*ran 10 c# asp.net garbage-collection
我正在将多个多图像tiff文件连接到单个多图像tiff文件,并且在删除源tiff文件时遇到问题,因为Image类继续保持它们的句柄.
我正在通过Image.FromFile读取tiff图像:
Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile);
Run Code Online (Sandbox Code Playgroud)
之后我以相同的方式读取所有其他tiff图像并将它们附加到生成的tiff图像.
当我完成后,我使用此代码来释放引用并保存生成的文件:
ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush);
resultTiff.SaveAdd(ep);
resultTiff.Dispose();
Run Code Online (Sandbox Code Playgroud)
现在问题是文件句柄仍然存在(因此文件无法删除),除非我在调用GC.Collect()后resultTiff.Dispose()调用.
您可以想象通过调用GC我感觉不舒服,那么还有其他方法可以实现吗?
Ian*_*cer 19
解决问题的最佳方法是Image.FromFile使文件句柄处于打开状态,Image.FromStream而不是使用它.
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (Image original = Image.FromStream(fs))
{
...
Run Code Online (Sandbox Code Playgroud)
使用显式Dispose(),using()语句或将值设置为null在垃圾收集发生之前不能解决问题.强制垃圾收集发生通常是一个坏主意.
或尝试:
Using(Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile))
{
ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush);
resultTiff.SaveAdd(ep);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7218 次 |
| 最近记录: |