UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存

如题,destroyimadiate是立即将物体从场景hierachy中移除,并标记为 "null",注意 是带引号的null。这是UNITY内部的一个处理技巧。关于这个技巧有很争议。

destroy要等到帧末才会将物体从场景层级中移除并标记为"null"。

不管如何,二者都只是UNITY引擎层面的标记与处理,但在.NET底层,对象的内存都没有释放,只有手动GC.COLLECT或等待NET去GC时才会释放掉对象内存。

测试代码如下:点ADD按钮不断创建对象,点DEL按钮清除所有对象,通过观察进程内存数值来察看对象内存是否释放。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using System.Diagnostics;
 4 using UnityEngine;
 5 using UnityEngine.UI;
 6
 7 public class MyGo : MonoBehaviour
 8 {
 9     byte[] data = new byte[83000];
10 }
11 public class testad : MonoBehaviour {
12
13     Transform objs;
14     Text txt;
15
16     Process proc;
17     // Use this for initialization
18     void Start () {
19         var btnadd = transform.Find("btnAdd").GetComponent<Button>();
20         btnadd.onClick.AddListener(OnClckAdd);
21         var btndel = transform.Find("btnDel").GetComponent<Button>();
22         btndel.onClick.AddListener(OnClckDel);
23
24         objs = transform.Find("objs");
25
26         txt = transform.Find("Text").GetComponent<Text>();
27         proc = Process.GetCurrentProcess();
28     }
29
30     void OnClckAdd()
31     {
32         for (int i = 0; i < 20; ++i)
33         {
34             var go = new GameObject();
35             go.AddComponent<MyGo>();
36             go.transform.SetParent(objs);
37         }
38     }
39
40     void OnClckDel()
41     {
42         for (int i = objs.childCount - 1; i >= 0; i--)
43         {
44             GameObject.DestroyImmediate(objs.GetChild(i).gameObject);
45         }
46
47         System.GC.Collect();
48     }
49     // Update is called once per frame
50
51     float timer = 0;
52     void Update () {
53         if (timer > 0.5f)
54         {
55             timer = 0;
56             txt.text = ((int)(proc.WorkingSet64 / 1024)).ToString();
57         }
58         timer += Time.deltaTime;
59     }
60 }

posted on 2017-09-22 15:09 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存相关推荐

  1. UNITY Destroy()和DestroyImadiate()的区别

    UNITY Destroy()和DestroyImadiate()的区别 using System.Collections; using System.Collections.Generic; usi ...

  2. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

  3. Unity移动端游戏性能优化简谱之 常见游戏内存控制

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  4. Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement

    Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement 在上一篇文章中, 我们对整个Graphic部分做了概述, 这篇文章我们介绍ICanvasElement和 ...

  5. 图文并茂,傻瓜都能看懂的 JVM 内存布局

    本 JVM 系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握 JVM 相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习 JVM 知识,还是需要去阅读专业的书籍和文档. 本 ...

  6. Java 对象都是在堆上分配内存吗?

    为了防止歧义,可以换个说法:Java对象实例和数组元素都是在堆上分配内存的吗? 答:不一定.满足特定条件时,它们可以在(虚拟机)栈上分配内存. JVM内存结构很重要,多多复习 这和我们平时的理解可能有 ...

  7. 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

    转载自   从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...

  8. C#开发笔记之22-C#中的int、long、float、double等类型都占多少个字节的内存。

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之22-C#中的int.long.float.double等类型都占多少个字节的内存. | .Net中文网. C#开发笔记 ...

  9. 实验5.6 定义包含5个元素的对象数组,每个元素都是Employee类型的对象

    题目 定义包含5个元素的对象数组,每个元素都是Employee类型的对象. Employee类,其中包括姓名.街道地址.城市和邮编等属性,以及change_name()和display()等函数.di ...

最新文章

  1. django model filter_Django分表的两个方案
  2. x射线直接投影成像的条件_告诉你如何区分X射线DR、CR和胶片成像?
  3. 配置管理小报110221:在linux上用真实帐号发mail的方法
  4. Spring @AutoWired实现原理
  5. [perl]字符串转拼音首字母(支持多音字)
  6. 若存在linux samba共享需关闭,Samba共享后不能访问是selinux惹的祸
  7. Atiitt 关于不可替代性的思索 目录 1.1. 不可替代性与 这份工作谁都能干无关 1 1.2. 不可替代性未必很好,因为其岗位可能很累或者收入很低 1 1.3. 不可替代性与报酬无关 1 2
  8. 75道程序员面试逻辑思维题
  9. matlab输出复数值到.txt文件中
  10. 9.【Windows】如何制作原版Win10系统盘
  11. VS2013的下载与安装
  12. protobuf 3 的简单使用
  13. 在VS2017中添加WTL窗口
  14. 计算机网络与互联网(三)
  15. SpringBoot-HelloWorld
  16. 用java画跳棋棋盘
  17. 在线支付——如何防止订单重复支付?
  18. 通过一个具体的例子,讲解 SAP BDC 技术的使用步骤
  19. Q3全球太阳能企业融资规模达30亿美元 环增76%
  20. ESC32硬件---电路分析二(电流检测和反电动势检测)

热门文章

  1. SpringBoot+Vue整合WebSocket实现前后端消息推送
  2. Android中使用retrofit2进行网络get请求查询数据和post请求上传文件
  3. Winform中设置DevExpress的RadioGroup的items从配置文件中加载
  4. Java中实现按字符串位数在前面补0
  5. spring系列-注解驱动原理及源码-声明式事务使用及原理解析
  6. Centos7下安装Docker(详细安装教程、傻瓜式安装)
  7. 因为有了这个画图工具集,老师同学都说我画的图有特色(Processon,draw.io,Xmind)
  8. huggingface实操_Transformers 简介(上)
  9. matlab偶极矩电场强度分布图_1.2.10 电介质在外电场下的极化、电极化强度、电极化率...
  10. 免费直播 | 特邀大厂产品战略咨询顾问,详解数据驱动产品商业化