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

游戏加载本地图片生成Texture2D后是否需要手动释放Byte[]数组

结论

byte[] fileData属于.NET托管内存,默认不需要手动释放,当没有任何引用指向该数组时,会由C#垃圾回收器(GC)自动回收对应内存。但如果要加载大量无大小限制的用户图片,建议主动做优化,避免短时间内存峰值过高、大对象堆(LOH)碎片化导致内存占用居高不下的问题。

优化建议
  • 加载完Texture2D后立刻解除fileData的引用:加上fileData = null;,通知GC该对象可回收,避免不必要的内存驻留
  • 不要频繁调用GC,建议批量加载完一组图片后,再调用一次GC.Collect()主动回收堆积的托管内存,减少卡顿影响
  • 更高优先级的优化方案:避免用File.ReadAllBytes一次性读取整个大文件,要么改用Unity内置的UnityWebRequestTexture直接从本地路径加载纹理,内部底层会处理内存分配,不会在托管堆生成大体积byte[];要么用流式分批读取文件,减少大对象分配
  • 额外注意:你创建的Texture2D属于显存资源,GC无法自动回收,不用时必须手动调用Destroy(tex)释放,否则会出现更严重的内存泄漏问题
优化后代码示例
if (File.Exists(filePath)) 
{
    byte[] fileData = File.ReadAllBytes(filePath);
    Texture2D tex = new Texture2D(2, 2);
    tex.LoadImage(fileData);
    // 加载完成后立即置空,解除数组引用
    fileData = null;
    
    // 后续业务逻辑使用tex,不再使用tex时调用 Destroy(tex) 释放显存
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:45:05