关于“A Native Collection has not been disposed, resulting in a memory leak. Enabl”问题

这篇具有很好参考价值的文章主要介绍了关于“A Native Collection has not been disposed, resulting in a memory leak. Enabl”问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

提示:这里简述项目相关背景:

例如:当在进行UnityWebRequest请求数据时候,打印就报错显示“A Native Collection has not been disposed, resulting in a memory leak. Enabl”,但不能定位错误的地方在哪,于是百度也没有明确答案,然后摸索一番,后面是老大告诉我的,记录一下;


问题描述

提示:这里描述项目中遇到的问题:

例如:数据请求提交过程中,UnityWebRequest 不时出现数据没有释放的情况,偶尔会一部分数据
内存溢出情况:

IEnumerator Post(string url, string data, Action<string, bool> callback)
{
        UnityWebRequest post = UnityWebRequest.Post(url, "POST");
        if (!string.IsNullOrEmpty(data))
        {
            post.uploadHandler = (UploadHandler)new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
        }
        post.SetRequestHeader("Content-Type", "application/json");//根据个API需求定义请求头
        yield return post.SendWebRequest();
        if (post.result == UnityWebRequest.Result.Success)
        {
            callback?.Invoke(post.downloadHandler.text, true);

        }
        else
        {
            callback?.Invoke(post.error, false);
            Debug.LogError($"{post.error}:{transform}");
        }
}

原因分析:

提示:这里填写问题的分析:

这个通常都是直接使用了Nativearray过时没有释放就会报这个错
使用NativeArray的时候最好前面加 Using,或者结束时显示释放

Using(){
.....
}

显式释放


解决方案:

提示:这里填写该问题的具体解决方案:

在代码块前面加上using

IEnumerator Post(string url, string data, Action<string, bool> callback)
{
        using UnityWebRequest post = UnityWebRequest.Post(url, "POST");
        if (!string.IsNullOrEmpty(data))
        {
            post.uploadHandler = (UploadHandler)new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
        }
        post.SetRequestHeader("Content-Type", "application/json");//根据个API需求定义请求头
        yield return post.SendWebRequest();
        if (post.result == UnityWebRequest.Result.Success)
        {
            callback?.Invoke(post.downloadHandler.text, true);

        }
        else
        {
            callback?.Invoke(post.error, false);
            Debug.LogError($"{post.error}:{transform}");
        }
}

这样貌似就没有显示过了,除了这请求地方,其他地方还需要注意一下,目前只发现这个地方会有类似情况,有什么错误的,还希望各位大佬指出一下。文章来源地址https://www.toymoban.com/news/detail-525174.html

到了这里,关于关于“A Native Collection has not been disposed, resulting in a memory leak. Enabl”问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LateInitializationError: Field ‘data‘ has not been initialized.

    问题描述: LateInitializationError: Field \\\'data\\\' has not been initialized. 后期初始化错误:字段“数据”尚未初始化。  解决办法: 给data定义为空即可。 源代码: 修改后的代码: 参考链接:[Solved] LateInitializationError: Field has not been initialized 感谢群里的大佬提供的帮助!

    2024年02月13日
    浏览(39)
  • lateinit property has not been initialized加载失败Android

    本来我是想在onCreate之外使用swipeRefresh全局变量的,后面在调试的时候就出现了上述问题。 重新看一了一遍,发现是用错语法了,lateinit是用在var修饰变量的,对val变量应该使用by lazy,所以对于控件类的变量应该使用by lazy并且是不可变的,下面这张图就是错误用法了: 正确

    2024年02月16日
    浏览(41)
  • ERROR: your rosdep installation has not been initialized yet

    这个错误表示你的 rosdep 还没有初始化。rosdep 是一个 ROS 中的系统依赖管理工具,用于安装和配置需要的系统依赖包。在使用 rosdep 之前,需要先通过  rosdep update  命令初始化它。这个命令会连接远程服务器来更新 rosdep 的数据源,以获取所有支持的 ROS 版本和平台的依赖信息。所

    2024年02月09日
    浏览(43)
  • 小程序报错:Page “pages/index/index“ has not been registered yet

    提示:这里简述项目相关背景: 例如:项目场景:通过复制粘贴小程序页面时,微信开发者工具展示页面没有显示。 提示:这里描述项目中遇到的问题: 例如:在VSCode中复制粘贴Page里面的内容,撤回后小程序的内容没有展示。: 提示:这里填写问题的分析: 例如:暂时看

    2024年02月12日
    浏览(46)
  • 解决DeprecationWarning: executable_path has been deprecated, please pass in a Service object

    检查chromedriver版本是否与Chrome一致(是的,就这么简单…) 看了很多方法,说是Selenium版本变了,需要用Service,复制下来还是一样的错误,试了好久都不行,最后瞎猫碰上死耗子,是Chrome自动更新导致chromedriver不可用了… 附上下载地址: https://registry.npmmirror.com/binary.html?pa

    2024年02月11日
    浏览(49)
  • 报错: DeprecationWarning: executable_path has been deprecated, please pass in a Service object

    在使用selenium的时候运行如下代码的时候报出错误 :DeprecationWarning: executable_path has been deprecated, please pass in a Service object 刚开始觉得是火狐浏览器和驱动的问题,查阅资料之后发现是代码的问题 将代码改为如下之后能打开浏览器

    2024年02月14日
    浏览(45)
  • [ECharts] DEPRECATED: ‘normal‘ hierarchy in itemStyle has been removed since 4.0. All style properti

    一、报错情况: 二、原因: 三、解决: DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. DEPRECATED: ‘textStyle’ hierarchy in itemStyle has been removed since 4.0. There is a chart instance already initialized on the dom. 解决= 1、查看是否有 重名 的(不要出现) 2、

    2024年02月12日
    浏览(33)
  • DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver =

    解决warning: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Edge(\\\'C:/Users/cong/AppData/Local/Programs/Python/Python310/msedgedriver.exe\\\',options=option) 这个警告信息是在使用Python的Selenium库时出现的。它提示说“executable_path”已经被弃用了,建议使用一个Serv

    2024年02月11日
    浏览(41)
  • 【Error】DeprecationWarning: executable_path has been deprecated, please pass in a Service object

    解决warning: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Edge(\\\'C:/Users/cong/AppData/Local/Programs/Python/Python310/msedgedriver.exe\\\',options=option) 这个警告信息是在使用Python的Selenium库时出现的。它提示说“executable_path”已经被弃用了,建议使用一个Serv

    2024年02月06日
    浏览(43)
  • webpack.config.js配置文件报错:The ‘mode‘ option has not been set

    报错 WARNING in configuration The \\\'mode\\\' option has not been set, webpack will fallback to \\\'production\\\' for this value. Set \\\'mode\\\' option to \\\'development\\\' or \\\'production\\\' to enable defaults for each environment. You can also set it to \\\'none\\\' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/ 解决: 在package.json文件

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包