unity踩坑日记(Https请求)

写的程序需要频繁的发送HTTP请求与服务器通讯

    IEnumerator Upload()
    {
        using (UnityWebRequest www = new UnityWebRequest("xxxxxx", "POST"))
        {
            using (var uploadHandlerRaw = new UploadHandlerRaw(Encoding.Default.GetBytes("{}")))
            {
                www.certificateHandler = new WebReqSkipCert();
                www.uploadHandler = uploadHandlerRaw; //实例化上传缓存器
                www.downloadHandler = new DownloadHandlerBuffer(); //实例化下载存贮器
                www.SetRequestHeader("Content-Type", "application/json"); //更改内容类型,
                yield return www.SendWebRequest();

                if (www.result != UnityWebRequest.Result.Success)
                {
                    Debug.Log(www.error);
                }
                else
                {
                    dellist = new DelList();
//                Debug.Log(www.downloadHandler.text);
                    Root root = JsonUtility.FromJson<Root>(www.downloadHandler.text);
                    for (int i = 0; i < root.data.Count; i++)
                    {
                        if (ShiJian != null)
                        {
                            ShiJian(root.data[i].msg);
                        }

                        print(root.data[i].msg);
                        dellist.id_array.Add(root.data[i].id);
                    }

                    StartCoroutine(IsDel());
                }
                www.uploadHandler.Dispose();
                uploadHandlerRaw.Dispose();
                www.disposeDownloadHandlerOnDispose = true;
                www.disposeUploadHandlerOnDispose = true;
            }
        }
    }

程序跑了两个小时之后发现内存被吃满了,一开始以为是texture没被删除掉,导致的贴图动态加载了之后,物体删除了,但纹理贴图没被删除并且还没触发GC回收

后面发现是发送HTTP请求的时候unity 官方会默认给我们new一个uploadHandler,但是这个uploadHandler却好像没被释放掉,难受的是unity编辑器也没报错内存泄漏,就只能一直排查,最后真机调试的时候报了一次内存泄漏,好像问题是HTTP请求失败的时候unity不会去主动触发uploadHandler.Dispose();导致内存一直在涨,搞得内存泄漏,记下这篇踩坑记录,给自己做个提醒

参考解决问题的文章:(5条消息) [已解决]Unity使用WebRequest过程中发生内存问题A Native Collection has not been disposed_Miner_W的博客-CSDN博客

谢谢上面这位大佬的帮助

题外再插一句,如果HTTP请求的问题照着上文做了结果还没解决问题,内存还在不断的被程序吃掉,请检查有没有频繁的去生成texture,记得生成了texture之后一定要去删除掉它!!!

            if (GetComponent<RawImage>())
            {
                Texture tex = gameObject.GetComponent<RawImage>().texture;
                if (tex != null)
                {
                    Destroy(tex);
                }
                else
                {
                    Debug.Log("leak texture");
                }
            }

记得在销毁rawimage的时候一定要去先卸载texture!!!切记!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值