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

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

  1. WWW
    2.UnityWebRequest
    第一种 www 下载图片避免内存泄漏
    首先 请求部分
IEnumerator Request(Action 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 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)
这种方式也不会造成内存泄漏

你可能感兴趣的:(Unity 网络大量请求图片造成内存泄漏)