UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存
如题,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;
}
}
UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存的更多相关文章
- UNITY Destroy()和DestroyImadiate()的区别
using System.Collections; using System.Collections.Generic; using System.Timers; using UnityEngine; ...
- Unity开发实战探讨-资源的加载释放最佳策略
注:本文中用到的大部分术语和函数都是Unity中比较基本的概念,所以本文只是直接引用,不再详细解释各种概念的具体内容,若要深入了解,请查阅相关资料. Unity的资源陷阱 游戏资源的加载和释放导致的内 ...
- 【Unity】3.1 利用内置的3D对象创建三维模型
分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
问: linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 每个进程所拥有的4G独立的虚拟内存空间是什么意思?linux系统的虚拟4G空间中,高位的1G是用于系统内核运行的,那 ...
- js原型对象,每个new出来的新对象都有独立的原型对象__proto__
刚才看一篇博文的时候, 动手测试了一下 JavaScript的原型链, 原型对象,发现每个构造器(赋给了某个 prototype ) new 出来的对象都有各自独立的原型对象 __proto__. p ...
- python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
- Memory Ordering (注意Cache带来的副作用,每个CPU都有自己的Cache,内存读写不再一定需要真的作内存访问)
Memory Ordering Background 很久很久很久以前,CPU忠厚老实,一条一条指令的执行我们给它的程序,规规矩矩的进行计算和内存的存取. 很久很久以前, CPU学会了Out-Of ...
- Unity开发实战探讨-资源的加载释放最佳策略简要心得
Unity开发实战探讨-资源的加载释放最佳策略简要心得 看过我另外一篇关于Unity资源释放随笔<Unity开发实战探讨-资源的加载释放最佳策略>如果觉得略微复杂,那么下面是一些比较简要的 ...
- unity, destroy gameObject & destroy all children
一,destroy gameObject 删除名为xxx的gameObject 错误方法1: Destroy(xxx); 以上方法之所以错误,是因为Destroy在下一帧才生效,而在本帧之内xxx还存 ...
随机推荐
- IDEA中项目统一编码格式设置
统一UTF-8编码设置 第一处 File-settings-Editor-File Encodings 第二处 File-Other settings-Default settings 第三处 tom ...
- Java并发--线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 给select增加placeholder技巧
转自:http://stackoverflow.com/questions/5805059/how-do-i-make-a-placeholder-for-a-select-box/8442831 使 ...
- SQL夯实基础(九)MySQL联接查询算法
书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...
- Machine Schedule(二分图匹配之最小覆盖点,匈牙利算法)
个人心得:二分图啥的一点都不知道,上网借鉴了下,请参考http://blog.csdn.net/thundermrbird/article/details/52231639 加上自己的了解,二分图就是 ...
- 使用vigil 监控微服务系统包含可视化界面
1. 安装 a. rust cargo cargo install vigil-server b. docker docker pull valeriansaliou/vigil:v1.3.0 2. ...
- container-diff 谷歌开源镜像分析工具使用
1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...
- json.loads(s) returns error message like this: ValueError: Invalid control character at: line 1 column 33 (char 33)
json.loads(s) returns error message like this: ValueError: Invalid control character at: line 1 colu ...
- 引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别
1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符 ...
- GOF23设计模式之责任链模式(chain of responsibility)
一.责任链模式概述 将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求. 如果能则处理,否则传递给链上的下一个对象去处理. 定义责任链 (1)通过链表 ...