相关疑难解决方法(0)

为什么Image.FromFile有时会保持文件句柄打开?

我在ASP.NET应用程序中使用.NET中的GDI +进行了大量的图像处理.

我经常发现Image.FromFile()保持文件句柄打开.

为什么是这样?在没有保留文件句柄的情况下打开图像的最佳方法是什么.

  • 注意:我没有做任何愚蠢的事情,就像保持Image对象一样 - 即使我是,我也不希望文件句柄保持活动状态

gdi+ filehandle

20
推荐指数
3
解决办法
1万
查看次数

为什么我没有内存泄漏.Dispose()我.save()的位图到MemoryStream?

假设我创建了一个位图

Bitmap bitmap = new Bitmap(320, 200);
Run Code Online (Sandbox Code Playgroud)

当我把它写到某个流(在我的情况下,它是一个HttpResponseStream,由HttpListenerResponse给出),一切都很好:

bitmap.Save(stream, ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)

我不需要bitmap.Dispose(),位图使用的资源将自动清理.直接将Png写入不可搜索的流的问题是,它可能导致GDI +中发生一般错误,当我在Azure上尝试我的Asp应用程序时发生这种情况.这就是我的代码现在的样子:

using (MemoryStream ms = new MemoryStream())
{
  bitmap.Save(ms, ImageFormat.Png);
  ms.WriteTo(stream);
}
Run Code Online (Sandbox Code Playgroud)

现在除非我之后使用bitmap.Dispose(),否则会泄漏.

重新提出问题以获得更具体的答案: 为什么这种位图内存的泄漏似乎取决于我将其保存到哪种类型的流?

更新: 正如我在评论中被问到我是否确定它是泄密.在压力测试中反复调用上面的内容,我的w3wp进程将进入gig和gig的内存使用,直到我的机器开始交换,它将无法清理.

.net c# memorystream bitmap

3
推荐指数
1
解决办法
3566
查看次数

标签 统计

.net ×1

bitmap ×1

c# ×1

filehandle ×1

gdi+ ×1

memorystream ×1