You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

清理Bitmap列表前是否需先逐个释放Bitmap对象?

关于Bitmap列表清空的资源处理问题

必须先逐个销毁每个Bitmap对象,再清空列表,不能只依赖GC自动处理,原因如下:

  • Bitmap在多数平台(比如.NET、Android)中持有非托管系统资源(如GDI绘图句柄、原生内存块),这类资源不在托管GC的自动回收范围内。GC仅会回收Bitmap的托管对象外壳,不会主动释放底层的非托管资源。
  • 若直接清空列表,Bitmap对象会变为无引用状态,但非托管资源会持续占用系统资源,直到GC触发对象的Finalizer(析构函数)。但Finalizer的执行时机完全不确定,可能导致系统资源耗尽(比如GDI句柄达到上限)、内存泄漏,甚至引发程序崩溃。
  • 正确操作流程:
    1. 遍历列表中的每个Bitmap实例,调用平台对应的资源释放方法(比如.NET用Dispose(),Android用recycle())
    2. 再清空列表(调用Clear()或赋值为null)

举个.NET环境下的代码示例:

// 先逐个释放Bitmap资源
foreach (Bitmap bmp in myBitmapList)
{
    if (bmp != null)
    {
        bmp.Dispose();
    }
}
// 再清空列表
myBitmapList.Clear();

额外提醒:如果是通过using语句创建的Bitmap,会自动调用Dispose(),但手动维护在列表中的Bitmap,必须显式遍历释放。

内容的提问来源于stack exchange,提问作者Arvo Bowen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:43:09