Unity 处理mono内存(堆内存)泄露问题

2023-10-29

先讲解一下mono特性

一个很重要的信息:mono内存从系统里面申请的内存不会返回给系统

mono内存不足的时候会预申请内存(内存大小不定有可能10m有可能5m)

最近优化一个mono内存泄露问题

引起mono一直撑大多数都是内存泄露,要不就是一下子申请很大块内存

我这里主要说内存泄露,这个更难查

现在正常项目很多脚本不继承MonoBehaviour,实例化出来的对象,要及时处理生命周期,避免内存泄露,内存泄露导致mono一直撑大,然后内存一直涨而且不会返还给系统,导致游戏闪退

比如我项目中角色上各种控制器:数据控制器,buff控制器,武器控制器,技能控制器这些都是不继承MonoBehaviour,这些对象系统判断没引用就会回收,不过游戏战斗复杂各种引用导致对象没有释放(因为MonoBehaviour有生命周期就算被引用也会释放)。

我写个简单的例子如何内存泄露

using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour {

    test1 t;
    test1 t1;

    void Start ()
    {
        t = new test1();
        t1 = new test1();
        for (int i = 0; i < 10000; i++)
        {
            t.list.Add(new test2());
        }
        t1.list = t.list;
        t = null;
        //释放t,然后t1引用t.list导致t.list无法回收
        //处理方法 t.list.Clear();t1 = null;
    }
}

public class test1
{
    public List<test2> list = new List<test2>();
}

public class test2
{
    int[] a;
    public test2()
    {
        a = new int[1000];
    }
}

看看数据,一直没有回收t.list

如果想回收t.list,加t1 = null;或者t.list.Clear();

下面是加了t.list.Clear();的结果

 

总结一下

不继承MonoBehaviour的对象是根据没有引用才释放,如果引用复杂可能导致不回收,从而导致内存泄露

1.对象不用的时候手动设置为null标记去回收就可以解决

2.对象里面的列表数组字典,清对象之前全部清掉

如果嵌套比较多的更加要注意

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 处理mono内存(堆内存)泄露问题 的相关文章

  • 【数据集】目标检测常用数据集

    一个性能优良 极度完美的数据集 具有较小偏差的大数据集 对于计算机视觉领域算法的研究是很重要的 具体非常重要的作用 在目标检测中 知名的数据集一个接着一个的被发布 被公开 被广大研究者使用 本文是总结目标检测领域的权威数据集 既总结也供有需
  • 前端优化-WEB综合

    开启 gzip 压缩 gzip 是 GNUzip 的缩写 最早用于 UNIX 系统的文件压缩 HTTP 协议上的 gzip 编码是一种用来改进 web 应用程序性能的技术 web 服务器和客户端 浏览器 必须共同支持 gzip 目前主流的浏
  • Unity UGUI Canvas基础知识及优化

    unityUGUI源码 https github com Unity Technologies uGUI git 官方API https docs unity3d com cn 2018 4 ScriptReference Canvas h
  • 10亿级数据量的系统性能优化设计,被惊艳到了!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 这篇文章 我们来聊一聊在十亿级的大数据量技术挑战下 世界上最优秀的大数据系统之一的Hadoop是如何将系统性能提升数十倍的 首先一起来画个图 回顾一下Hadoop H
  • 面试:js 延迟加载方式

    相关知识点 js 延迟加载 也就是等页面加载完成之后再加载 JavaScript 文件 js 延迟加载有助于提高页面加载速度 一般有以下几种方式 defer 属性 async 属性 动态创建 DOM 方式 使用 setTimeout 延迟方
  • 性能测试指标全解

    最近在公司做压测时 对于各个监控工具的监控指标一脸蒙 有时候不清晰 有时候理解错误 于是 恶补基础知识 希望对广大网友有所帮助 一 性能测试指标 1 在线用户数 此指标指的是某个时间段内 在服务器上保持登录状态的用户数 在线用户数不等同于并
  • Android性能优化—内存优化

    一 App内存组成以及管理 Android 给每个 App 分配一个 VM 让App运行在 dalvik 上 这样即使 App 崩溃也不会影响到系统 系统给 VM 分配了一定的内存大小 App 可以申请使用的内存大小不能超过此硬性逻辑限制
  • 性能优化——动画优化笔记

    动画优化 再UWA报告中Animator相关的函数有两个 一个是DirectorUpdateAnimationBegin 一个是DirectorUpdateAnimationEnd 一般来说 我们都要关注这两个函数的堆栈 通过堆栈函数的调用
  • 实践指南-前端性能提升 270%

    一 背景 当我们疲于开发一个接一个的需求时 很容易忘记去关注网站的性能 到了某一个节点 猛地发现 随着越来越多代码的堆积 网站变得越来越慢 本文就是从这样的一个背景出发 着手优化网站的前端性能 并总结出一套开发习惯 让我们在日常开发时 也保
  • nodejs性能优化——多进程

    1 引言 现在在准备毕设 打算还是使用nodejs作为后端 遇到了一些知识上的瓶颈 主要是想要写出一个高性能点的爬虫 由于每次请求的http数量上万 经常挂了 要么是他人的服务器终止了连接 要么是node经不起密集CPU 毕竟请求完成之后还
  • 性能测试,服务器资源监控工具nmon常用操作

    在性能测试过程中 对服务端的各项资源使用情况进行监控是很重要的一环 这篇博客 介绍下服务端监控工具 nmon的使用方法 一 认识nmon 1 简介 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具 它能在系统运行过程
  • 前端性能优化之Gzip

    前端性能优化之Gzip 什么是GZIP gzip是GNUzip的缩写 它是一个GNU自由软件的文件压缩程序 它是Jean loupGailly和MarkAdler一起开发的 压缩原理 Gzip 压缩背后的原理 是在一个文本文件中找出一些重复
  • Android性能优化系列:Bitmap

    文章目录 Bitmap 简介 Bitmap 的创建 不同系统版本 Bitmap 的内存分配策略 Bitmap 内存占用计算 在电脑查看的图片大小和运行内存大小区别 图片占用内存计算 Bitmap 内存优化 inJustDecodeBound
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • vue使用高德地图导航路线失败,获取驾车数据失败:INVALID_USER_SCODE(解决方法)

    高德地图使用路线导航 最近做大屏项目 里面有地图定位 路线导航等方面的功能 在做路线定位是一直都是获取不到导航的路线 经过好长时间的百度看高德api文档终于找到解决方法 解决方法 添加高德地图安全密钥 添加高德安全密钥 安全密钥是和key一
  • Android性能优化系列:如何合理使用内存

    文章目录 1 Android编译器 2 内存泄漏 3 内存抖动 4 引用 5 取消部分后台服务 6 数据类型 7 自动装箱 8 Sparse数组集 9 ArrayMap 10 循环 11 枚举 12 常量 静态变量 13 字符串 14 本地
  • 线上系统性能太差,我手写了字符串切割函数,性能提升10倍以上

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 工作中常用的 split 切割字符串效率高吗 JDK 提供字符串切割工具类 StringTokenizer 手把手带你实现一个更高效的字符串切割工具类 总结 今
  • 什么是javascript内存泄漏?以及解决方法

    什么是javascript内存泄漏 以及解决方法 一 什么是javascript内存泄漏 二 常见的内存泄漏 1 意外的全局变量 通常是变量未被定义或者胡乱引用了全局变量 2 计时器 3 闭包 4 事件监听未被移除 5 console lo
  • 提升应用性能的关键步骤——UniApp性能优化策略与技巧详解

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 代
  • 15 个高级 Java 多线程面试题及回答

    在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分 如果你想获得任何股票投资银行的前台资讯职位 那么你应该准备很多关于多线程的问题 在投资银行业务中多线程和并发是一个非常受欢迎的话题 特别是电子交易发展方面相关的 他们会问面试

随机推荐

  • 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章 喜欢把什么行业现状啊 研究现状啊什么的写了一大通 感觉好像在写毕业论文似的 我这不废话 先直接上几个图 感受一下 第一张图是在把代码注入到地图里面 启动首页的时候弹出个浮窗 下载网络的图片 苍老师你们不会不认识吧 第二张图是微
  • Pygame实战:Python做一款超好玩的滑雪大冒险小游戏,超会玩【附源码】

    导语 冬日当然要和心爱的人一起去滑雪 徜徉在雪白的世界 浪漫又刺激 唯有爱和滑雪不可辜负 不但风景绝美 而且还超 会 玩 现在还不是时候 但秋天已过半动冬天还会远吗 既然不能现在去滑雪 但是小编可以先让大家身临其境 带大家做一款超好玩的滑雪
  • Kafka3.0.0版本——消费者(RoundRobin分区分配策略以及再平衡)

    目录 一 RoundRobin 分区分配策略原理 二 RoundRobin分区分配策略代码案例 2 1 创建带有7个分区的sixTopic主题 2 3 创建三个消费者 组成 消费者组 2 3 创建生产者 2 4 测试 2 5 RoundRo
  • Latex中一些特殊常用符号的输入

    搞学术的童鞋们很有可能会接触到Latex这种论文格式编辑工具 一般在论文投稿的时候 大多数期刊和会议会给一个Latex模板 要求将你的论文用Latex编辑成 pdf版本 一般的word文字部分是可以直接复制粘贴到latex的 tex文档中的
  • QT子线程中使用主线程的方法

    QT子线程中使用主线程的方法 QMetaObject invokeMethod p setText Q ARG const QString strNum 使用QMetaObject invokeMethod方法将setText函数在主线程运
  • 机器学习——信息熵与信息增益

    问 信息熵越大说明其纯度越高 答 错误 信息熵越小 说明数据集的纯度越高 信息熵是衡量数据集纯度的指标之一 它是对数据集中所有类别出现概率进行加权平均所得到的一个值 信息熵是度量样本集合纯度 不确定度最常用的指标之一 但要注意 信息熵越小
  • 【Mac】mac安装redis客户端 Error: Cask ‘rdm‘ is unavailable: No Cask with this name exist

    1 概述 mac安装redis客户端 rdm 报错如下 lcc lcc brew cask install rdm Updating Homebrew Error Cask rdm is unavailable No Cask with t
  • java——线程池

    一 线程池 线程池可以看做是线程的集合 它的工作主要是控制运行的线程的数量 处理过程中将任务放入队列 然后在线程创建后 启动这些任务 如果线程数量超过了最大数量超出数量的线程排队等候 等其它线程执行完毕 再从队列中取出任务来执行 他的主要特
  • 重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

    今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode 我们准备从以下几点入手分析 1 equals 的所属以及内部原理 即Object中equals方法的实现原理 说起equals方法 我们都知道是超类Object
  • Android Hierarchy Viewer

    Android的SDK工具包中 有很多十分有用的工具 可以帮助程序员开发和测试Android应用程序 大大提高其工作效率 其中的一款叫Hierachy Viewer的可视化调试工具 可以很方便地帮助开发者分析 设计 调试和调整UI界面 提高
  • 高斯低通频率域滤波

    基本原理 频率域滤波 即将原图像通过傅里叶变换 转换至频率域 在频率域利用该域特有的性质进行处理 再通过傅里叶反变换把处理后的图像返回至空间域 所以 频率域的操作是在图像的傅里叶变换上执行 而不是在图像本身上执行 高斯低通滤波器传递函数表达
  • 跟着 iLogtail 学习设计模式

    设计模式是软件开发中的重要经验总结 Gang of Four GoF 提出的经典设计模式则被誉为设计模式中的 圣经 但是设计模式往往是以抽象和理论化的方式呈现 对于初学者或者没有太多实战经验的开发者来说 直接学习设计模式往往会显得枯燥乏味
  • c++ parse html,c++ - QT parse html to txt file - Stack Overflow

    I think it s always best if you actually attempt at something and post up your code to serve as a starting point But I m
  • 小径

    尽入夏 绕竹篱 已是桃花稀落 笑到西川 此去随所遇 不羡青山不拜仙 园中花草 草木香幽 清风独得朝暮暖 蕲水携来四季春 云岩宫阙 尽是人间 峰峦断却处 本是一脉之水 两侧命不相同 一水之门 几多思量 几多判却 一方玲珑剔透 嬉水无痕 一方藻
  • 计算机网络——第四章

    网络层 主要任务是把分组从源端传送到目的端 为分组交换网上的不同主机提供通信服务 传输单位是数据报 功能 1 路由选择与分组转发 2 异构网络互联 3 拥塞控制 若所有节点都来不及接受分组 而要丢弃大量分组的话 网络就处于拥塞状态 因此要采
  • python数据库-NumPy与Matplotlib库

    NumPy 1 导入numpy库 import numpy as np python中用import导入库 这里的意思是将怒骂朋友作为np导入 通过这样的形式 之后使用numpy相关方法用np使用 2 生成numpy数组 import nu
  • LeetCode--数组类算法:删除排序数组中的重复项 II

    题目 给定一个排序数组 你需要在原地删除重复出现的元素 使得每个元素最多出现两次 返回移除后数组的新长度 不要使用额外的数组空间 你必须在原地修改输入数组并在使用 O 1 额外空间的条件下完成 示例一 给定 nums 1 1 1 2 2 3
  • 梳理webpack

    一 入门 1 项目初始化 新建一个目录 初始化npm npm init 此时会需要填入一些项目的基本描述 webpack是运行在node环境中的 我们需要安装以下两个npm包 npm i D webpack webpack cli 生成no
  • 【mcuclub】扫码枪-(型号:M100(1D)-TTL)(型号:GM861S)

    一 实物图 型号 M100 1D TTL 只能扫描一维条形码 二 原理图 编号 名称 功能 1 VCC 电源正 2 GND 电源地 3 TXD 串口数据发送引脚 接单片机上的RX引脚 4 RXD 串口数据接收引脚 接单片机上的TX引脚 三
  • Unity 处理mono内存(堆内存)泄露问题

    先讲解一下mono特性 一个很重要的信息 mono内存从系统里面申请的内存不会返回给系统 mono内存不足的时候会预申请内存 内存大小不定有可能10m有可能5m 最近优化一个mono内存泄露问题 引起mono一直撑大多数都是内存泄露 要不就