问题背景

Unity版本:2021.3.16

在用Unity做一个文字识别的应用,方案是用UnityWebRequest把图片发送给web api,但在发送一定时间后Unity会报错。

(具体堆栈信息可以通过添加com.unity.entities包后开启堆栈追踪查看)

搜索试了不同的方法,后来在Unity Forum中一个帖子里找到了实际的原因和解决方案。

做了一些总结,该报错根据具体情况,可以尝试从以下几个方向解决:

报错原因1:UnityWebRequest没有释放。

解决方案:使用using把UnityWebRequest框起来,或者在使用完后调用Dispose()。

     using(UnityWebRequest www=new UnityWebRequest(webUrl)){// ....yield return www.SendWebRequest();// ....}

报错原因2: DownloadHandler或UploadHandler没有释放。

解决方案:设置两者随WebRequest一起释放,或者手动Dispose()。

        using(UnityWebRequest www=new UnityWebRequest(webUrl)){// ....yield return www.SendWebRequest();// ....www.disposeDownloadHandlerOnDispose = true;www.disposeUploadHandlerOnDispose = true;}

报错原因3:使用了自己定义的UploadHandle替换了创建WebRequest时创建的UploadHandle,而在释放时没有释放两者。

具体原因:参考UnityWebRequest.Post()方法中SetPost()的代码

        private static void SetupPost(UnityWebRequest request, string postData){request.downloadHandler = new DownloadHandlerBuffer();if (!string.IsNullOrEmpty(postData)){byte[] array = null;string s = WWWTranscoder.DataEncode(postData, Encoding.UTF8);array = Encoding.UTF8.GetBytes(s);request.uploadHandler = new UploadHandlerRaw(array);request.uploadHandler.contentType = "application/x-www-form-urlencoded";}}

可以注意到使用UnityWebRequest.Post()时,会自动创建上传和下载的Handle并赋值给WebRequest的downloadHandler和uploadHandler属性

在实际使用时我们可能会替换掉WebRequest的这两个属性,同时在释放内存时只关注了替换后的downloadHandler和uploadHandler属性,导致原来的handler没有被释放,出现报错。

解决方案:在替换前先释放原有的uploadHandler/downloadHandler

        // 使用UnityWebRequest.Post()方法创建UnitywebRequestusing (UnityWebRequest www = UnityWebRequest.Post(url, dataJson)){//设置请求的信息....            // 创建自己的uploadHandler,使用using语句保证自动释放using (var uploadHandlerRaw = new UploadHandlerRaw(bodyRaw)){// 释放使用UnityWebRequest.Post方法时创建的uploadHandlerwww.uploadHandler.Dispose();// 替换为自己创建的uploadHandlerwww.uploadHandler = uploadHandlerRaw;yield return www.SendWebRequest();// 处理请求的结果...// 保险起见再设置一下handler随WebRequest一起释放www.disposeDownloadHandlerOnDispose = true;www.disposeUploadHandlerOnDispose = true;}}

参考文章:A Native Collection has not been disposed, resulting in a memory leak. - Unity Forum

[已解决]Unity使用WebRequest过程中发生内存问题A Native Collection has not been disposed相关推荐

  1. python吃显卡还是内存不足_解决pytorch GPU 计算过程中出现内存耗尽的问题

    Pytorch GPU运算过程中会出现:"cuda runtime error(2): out of memory"这样的错误.通常,这种错误是由于在循环中使用全局变量当做累加器, ...

  2. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...

    之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...

  3. SQL Server 2008 问题——已成功与服务器建立连接,但是在登录过程中发生错误。

    登录报错:已成功与服务器建立连接,但是在登录过程中发生错误. (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程. 解决办法:先用windows模式登录上去,然后 ...

  4. 已成功与服务器建立连接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0-指定的网络名不再可用。)(Microsoft SQL Server,错误:64)

    问题的发生:今天处于公网的测试服务器数据库SQL SERVER 2008 在连接时突然报错: 已成功与服务器建立连接,但是在登录过程中发生错误.(provider:TCP提供程序,error:0-指定 ...

  5. 转转登录一直显示服务器错误,[转]已成功与服务器建立连接但是在登录过程中发生错误。provid...

    已 成功 与 服务器 建立 连接 但是 在 登录 过程 中 发生 错误 . provider 共享 内存 提供 程序 error 0 管道 的另一端上无 任何 进程 . 分类: sql server ...

  6. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)

    已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确.) 参考文章: (1)已成功与服务器建立连接 ...

  7. SQL SEVER登录失败,无法连接服务器或已成功与服务器建立连接,但是在登录过程中发生错误。(Win10版本,SQL 2019)

    一.首先无法登陆到服务器可以检查一下操作是否打开 1.点进服务器属性 2.然后点进安全性,看下服务器身份验证是SQL SEVER 和Windows身份验证模式,,以及登录审核是否是仅限失败的登录 二. ...

  8. SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误

    SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误 SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误.provider: Shared M ...

  9. 从输入 URL 到浏览器接收的过程中发生了什么事情

    从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU  首先是「输入 U ...

最新文章

  1. pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
  2. linux下配置多网卡或多IP的方法
  3. C语言再学习 -- Stack Overflow(堆栈溢出)
  4. Qt工作笔记-QCustomplot绘制表,实现输入定位功能
  5. shop--7.店铺信息编辑--Controller层
  6. signature=c9e077ef93038bf703dbc146dd834bb7,基于RSASignUtil非对称私钥进行字符串加签及公钥解密验证的完整代码示例...
  7. Ubuntu查看文件夹下文件的个数
  8. 趣拼图最后完成及总结
  9. 交互式多模型_26亿参数,智源、清华开源中文大规模预训练模型
  10. 【题解】Luogu P2147 [SDOI2008]洞穴勘测
  11. CentOS 6.0 下 VNC 配置方法
  12. Springboot
  13. ARP表项的创建与更新
  14. 网站开发的需求分析报告
  15. 导航网站完整程序源码
  16. LJX的校园:体育课
  17. Linux 必学的几个命令
  18. 【积水成渊-逐步定制自己的Emacs神器】4:Emacs自动补全
  19. 003-photoshop快速去掉图片背景颜色、签名放到指定文档合成图片
  20. 小米手机访问电脑共享文件_小米手机不用数据线直接访问电脑上的文件的方法...

热门文章

  1. PAM 安全框架导致ssh无法登陆的排查方法
  2. “软苹果”不是孬种,只是做回了自己
  3. Java基础(二)——IDEA快捷键、类和对象、三大特征、构造方法、对象比较、抽象类、接口、模拟发红包
  4. 【蓝桥杯集训·每日一题】AcWing1394. 完美牛棚
  5. 手机浏览器User-Agent信息
  6. linux 修改磁盘挂载点,Ubuntu 添加硬盘和修改USR 到新硬盘挂载点
  7. camera资料链接整理
  8. 【嵌入式操作系统】FreeRTOS信号量mutex和semaphore的区别
  9. 词嵌入及方法one-hot、词袋、TFIDF
  10. 上海城建职业学院计算机应用技术交流群,上海城建职业学院学生转专业资格初审通过情况汇总表.PDF...