unity如何检测内存泄漏_Unity 网络大量请求图片造成内存泄漏

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

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)

这种方式也不会造成内存泄漏


版权声明:本文为weixin_42349261原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。