A Native Collection has not been disposed, resulting in a memory leak. Allocated from:
Unity.Collections.NativeArray1:.ctor(Byte[], Allocator)
UnityEngine.Networking.UploadHandlerRaw:.ctor(Byte[])
UnityEngine.Networking.UnityWebRequest:SetupPost(UnityWebRequest, WWWForm)
报错全文如上
先看解决方法
using (var request = UnityWebRequest.Post(serverURL, "POST"))
using (var uh = new UploadHandlerRaw(bodyRaw))
{
//request.disposeUploadHandlerOnDispose = true;
//request.disposeDownloadHandlerOnDispose = true;
//request.disposeCertificateHandlerOnDispose = true;
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
yield return request.SendWebRequest();
}
用两个using套起来就能解决
在网上查了很多资料,很多人都说是因为自己创建的uploaderhandler没有被释放掉,从而引发了内存泄漏。
很多人都说用
//request.disposeUploadHandlerOnDispose = true;
//request.disposeDownloadHandlerOnDispose = true;
//request.disposeCertificateHandlerOnDispose = true;
这三个来设置就没事,但是我试过,效果不理想,可能是因为unity本身的问题,也有可能是改了。
然后我想,手动释放uploadhandler可以吗?试了试,
request.uploadHandler.Dispose();
效果不理想,甚至听网上一个老哥说用构造器来创建
byte[] bodyRaw = Encoding.UTF8.GetBytes(send_data);
webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw);
一样效果不理想。
然后在
A Native Collection has not been disposed, resulting in a memory leak. - Unity Forum
这个网页的很下面翻到了解决方法。谢谢这位老哥。解决了困扰我很久的问题。
而这个论坛,是我在另一个作者的博客发现的。
https://blog.csdn.net/Miner_W/article/details/129400923
也谢谢这位老哥。