Unity 报错 A Native Collection has not been disposed, resulting in a memory leak.

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

也谢谢这位老哥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值