Unity 网络大量请求图片造成内存泄漏

目前untiyAPI 提供网络请求图片方式有两种

  1. WWW
    2.UnityWebRequest
    第一种 www 下载图片避免内存泄漏
    首先 请求部分
IEnumerator Request(Action<Texture2D > action)  
    {  
        WWW www = new WWW("url");  
  
  
        yield return www;//等待Web服务器的反应  
  
  
        if (www.error != null)  
        {  
            Debug.Log( www.error);  
            yield return null;  
        }  
  
  
       action( www.texture);  
    }  

第二部分 给RawImage 赋值 这部分 尤为重要,处理不好会内存泄漏
RawImage rawImage;
第一种:

void Create(Texture2D t)  
      {  
             //先销毁Texture  
             Destory(  rawImage);  
             rawImage.texture=t;  
     }   

这种方式是先将rawImage 引用的Texture销毁,再引用新的Texture2D,内存不会泄露

UnityWebRequest 下载方式:要注意会有两处引起内存泄漏的地方
这种方式 如果使用UnityWebRequest GetTexture 会引起内存泄漏,这是引擎本身的bug
可以去源码 ,unity 在销毁UnityWebRequest 没有销毁DownloadHandlerTexture引用的
mTexture,就会造成 每次新的下载都会引起内存泄漏,这是其中一种,第二种就是大家常见的
图片赋值管理不当引起的内存泄漏

IEnumerator  Request(Action<byte[] > action)  
{  
    UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);  
    request.downloadHandler =new DownloadHandlerBuffer();  
    yield return  request.SendWebRequest();  
    aciont( request.downloadHandler.data);  
}  

定义全局变量 Texture2D cachTex;
初始化cachTex 在Start 或者Awake函数中调用

void Init()
{
 cachTex =new Texture2D(2,2);
 rawImage.texture = cachTexture;
}
//接收数据
void Create(byte[] bs)
{
 cachTex .LoadImage(bs);
   cachTex .Apply();     
}

OnDestory()时销毁 cachTex
Destory(cachTex)
这种方式也不会造成内存泄漏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容