UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存
2024-08-28 20:48:40
如题,destroyimadiate是立即将物体从场景hierachy中移除,并标记为 "null",注意 是带引号的null。这是UNITY内部的一个处理技巧。关于这个技巧有很争议。
destroy要等到帧末才会将物体从场景层级中移除并标记为"null"。
不管如何,二者都只是UNITY引擎层面的标记与处理,但在.NET底层,对象的内存都没有释放,只有手动GC.COLLECT或等待NET去GC时才会释放掉对象内存。
测试代码如下:点ADD按钮不断创建对象,点DEL按钮清除所有对象,通过观察进程内存数值来察看对象内存是否释放。
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI; public class MyGo : MonoBehaviour
{
byte[] data = new byte[];
}
public class testad : MonoBehaviour { Transform objs;
Text txt; Process proc;
// Use this for initialization
void Start () {
var btnadd = transform.Find("btnAdd").GetComponent<Button>();
btnadd.onClick.AddListener(OnClckAdd);
var btndel = transform.Find("btnDel").GetComponent<Button>();
btndel.onClick.AddListener(OnClckDel); objs = transform.Find("objs"); txt = transform.Find("Text").GetComponent<Text>();
proc = Process.GetCurrentProcess();
} void OnClckAdd()
{
for (int i = ; i < ; ++i)
{
var go = new GameObject();
go.AddComponent<MyGo>();
go.transform.SetParent(objs);
}
} void OnClckDel()
{
for (int i = objs.childCount - ; i >= ; i--)
{
GameObject.DestroyImmediate(objs.GetChild(i).gameObject);
} System.GC.Collect();
}
// Update is called once per frame float timer = ;
void Update () {
if (timer > 0.5f)
{
timer = ;
txt.text = ((int)(proc.WorkingSet64 / )).ToString();
}
timer += Time.deltaTime;
}
}
最新文章
- MongoDB学习笔记七:管理
- 杨辉三角 &;&; 鸽兔同校
- 要在一般处理程序中获取其他页面的session值
- .NET XML文件增删改查
- 【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!
- Linux Shell常用命令手册(Updating)
- Selenium webdirver 操作浏览器
- NodeJS+express+mogondb学习笔记01
- activiti节点跳转
- 使用Navicat连接阿里云服务器上的MySQL数据库--转
- 在Windows Server 2008 R2下搭建jsp环境(一)
- django 后端反向生成url
- 信号(signal)
- 批量获取oracle的表和表字段注释【原】
- Centos创建定时任务和开机启动运行脚本
- 几种简单的编码(为什么使用ASCII码)
- docker知识复习
- pyhton-函数初级
- Java利用for循环输出空心的菱形
- springMVC入门程序。使用springmvc实现商品列表的展示。
热门文章
- const in C/C++
- 命令“";xxx.exe"; xxx”已退出,代码为 n。这些错误是什么意思?(3 / 123 / 9009)
- ssh连接至Ubuntu服务器时,提示以下错误:REMOTE HOST IDENTIFICATION HAS CHANGED!
- php mysql apache 的字符集
- 安装 LAMP
- 常见企业IT支撑【3、SVN代码版本控制系统】
- OPC接口相关资料地址
- 谈谈GPU与FPGA的一些看法
- Java中的三元运算:a = (a >; b)?a:b
- Java-Runoob-高级课程:Java 集合框架