美文网首页
Unity 网络大量请求图片造成内存泄漏

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

作者: 流光念岁月 | 来源:发表于2019-07-15 15:14 被阅读0次

    目前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)
    这种方式也不会造成内存泄漏

    相关文章

      网友评论

          本文标题:Unity 网络大量请求图片造成内存泄漏

          本文链接:https://www.haomeiwen.com/subject/ntzllqtx.html