Unity Foreach循环GC测试

news2024/9/21 4:35:28

关于网上讨论Foreach循环会不会产生GC的问题,不如自己实验一番,我用的Unity版本是2021.3.23f1c1版本。

测试代码如下:

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Profiling;

namespace Test
{
    public class MyGCTest : MonoBehaviour
    {
        Dictionary<int, float> dic1 = new Dictionary<int, float>()
        {
            { 0, 0.2f },
            { 100, 100.0f }
        };

        Dictionary<int, int> dic2 = new Dictionary<int, int>()
        {
            { 0, 0 },
            { 100, 100 }
        };

        Dictionary<int, string> dic3 = new Dictionary<int, string>()
        {
            { 0, "0.2f" },
            { 100, "100.0f" }
        };

        Dictionary<string, int> dic4 = new Dictionary<string, int>()
        {
            { "0", 0 },
            { "100", 100 }
        };

        List<int> list1 = new List<int>() { 0, 1, 0 };
        List<bool> list4 = new List<bool>() { false, true, false };
        List<char> list5 = new List<char>() { 'f', 'a', 'b' };
        List<string> list3 = new List<string>() { "6", "2", "3" };
        List<TestClass> list2 = new List<TestClass>() { new TestClass("6"), new TestClass("2"), new TestClass("3") };
        List<TestClass2> list6 = new List<TestClass2>() { new TestClass2(6), new TestClass2(2), new TestClass2(3) };
        int[] arr1 = new int[3] { 0, 1, 0 };
        bool[] arr2 = new bool[3] { false, true, false };
        char[] arr3 = new char[3] { 'f', 'a', 'b' };
        string[] arr4 = new string[3] { "6", "2", "3" };
        TestClass[] arr5 = new TestClass[3] { new TestClass("6"), new TestClass("2"), new TestClass("3") };

        void Update()
        {
            //----------------------字典-----------------
            Profiler.BeginSample("ForeachGC.dic1");
            foreach (var x in dic1)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.dic2");
            foreach (var x in dic2)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.dic3");
            foreach (var x in dic3)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.dic4");
            foreach (var x in dic4)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.dic1第二次调用");
            foreach (var x in dic1)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.dic1.Values");
            foreach (var x in dic1.Values)
            {
            }

            Profiler.EndSample();
            //----------------------列表-----------------
            Profiler.BeginSample("ForeachGC.list1");
            foreach (var x in list1)
            {
            }

            Profiler.EndSample();
            
            
            Profiler.BeginSample("ForeachGC.list2");
            foreach (var x in list2)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.list3");
            foreach (var x in list3)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.list4");
            foreach (var x in list4)
            {
            }

            Profiler.EndSample();
            
            Profiler.BeginSample("ForeachGC.list5");
            foreach (var x in list5)
            {
            }

            Profiler.EndSample();
            
            Profiler.BeginSample("ForeachGC.list6");
            foreach (var x in list6)
            {
            }

            Profiler.EndSample();
            //----------------------数组-----------------
            Profiler.BeginSample("ForeachGC.arr1");
            foreach (var x in arr1)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.arr2");
            foreach (var x in arr2)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.arr3");
            foreach (var x in arr3)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.arr4");
            foreach (var x in arr4)
            {
            }

            Profiler.EndSample();

            Profiler.BeginSample("ForeachGC.arr5");
            foreach (var x in arr5)
            {
            }

            Profiler.EndSample();
        }
    }

    public class TestClass
    {
        private string sd2;

        public TestClass(string sd)
        {
            sd2 = sd;
        }
    }

    public class TestClass2
    {
        private int sd2;

        public TestClass2(int sd)
        {
            sd2 = sd;
        }
    }
}

第一帧产生GC;
在这里插入图片描述
第二帧不产生GC
在这里插入图片描述

后面都不产生GC
在这里插入图片描述

结论如下:

  1. 不同键值字典对的字典第一帧会产生48B的GC,键值对相同的字典只会产生一次GC;
  2. 遍历字典的Value会产生120BGC
  3. 遍历数组均不会产生GC
  4. 遍历List时,值类型会在首帧产生48BGC,引用类型不会产生GC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqli-labs靶场通关攻略(41-50)

Less-41 1、判断闭合方式 输入?id1 -- 必和成功 2、查看回显点 输入?id-1 union select 1,2,3 -- 得出回显点为2&#xff0c;3 3、查询数据库名 输入?id-1 union select 1,2,database() -- 4、查询数据库中的表名 输入?id-1 union select 1,2,group_concat(table_nam…

Notepad++回车不自动补全

问题 使用Notepad时&#xff0c;按回车经常自动补全&#xff0c;但我们希望回车进行换行&#xff0c;而不是自动补全&#xff0c;而且自动补全使用Tab进行补全足够了。下文介绍设置方法。 设置方法 打开Notepad&#xff0c;进入设置 - 首选项 - 自动完成&#xff0c;在插入选…

代码随想录Day 29|leetcode题目:134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 第八章 贪心算法 part03二、题目题目一&#xff1a;134. 加油站解题思路&#xff1a;暴力方法贪心算法&#xff08;方法一&#xff09;贪心算法&#xff08;方法二&#xff09; 题目二&#xff1a…

openEuler:日志管理

日志介绍 概述 系统日志是一系列用于记录系统操作和活动进行的文件&#xff0c;这些日志对于监控和排查系统问题非常重要&#xff0c;因为它们可以提供有关系统行为、应用活动和安全事件的见解。系统日志还可以成为识别 Linux 系统中潜在安全弱点和漏洞的重要信息来源。通过分…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-20 I2C MASTER控制器驱动设计

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

pyautogui通过图像获取定位实现计算器自动计算

使用 pyautogui.locateCenterOnScreen 能够在屏幕上搜索给定图像的位置&#xff0c;并准确地返回该图像的中心点坐标。 &#x1f33f;使用 pyautogui 实现计算器自动计算 准备工作&#xff0c;把计算器的按钮截图保存下来。例如&#xff1a; 计算“75”&#xff0c;实现代码如…

【网络】WebSocket协议详解

WebSocket协议详解 一 、WebSocket 诞生背景二、WebSocket 特点三、WebSocket 的握手环节四、WebSokect 的数据格式1、 第一个字节2、第二个字节3、Masking-key4、playload Data5、一些注意细节 WebSocket 的官方文档 WebSocket 的中文文档(非官方) 一 、WebSocket 诞生背景 在…

深度学习基础—简单的卷积神经网络

3.1.卷积层 下面以卷积神经网络的某一层为例&#xff0c;详解一下网络的结构。 假设当前位于l层&#xff0c;则输入6*6*3的彩色图片&#xff0c;有两个3*3*3的过滤器&#xff0c;卷积操作后将输出2个4*4的图片。如果把过滤器看成权重w&#xff0c;卷积这一步操作其实就是w*a&am…

消息称华为纯血鸿蒙部分应用采用虚拟机方案

华为预计在11月发布正式版纯血鸿蒙&#xff0c;为了能够适配更多的App&#xff0c;官方也是有了新的解决方案。报道中提到&#xff0c;纯血鸿蒙设备对有些还没上架的应用会使用虚拟机方案过渡。据悉&#xff0c;华为的虚拟机方案作为过渡措施&#xff0c;首先能确保用户在鸿蒙系…

概率论与编程的联系及数据科学应用

目录 引言 第一章 概率模拟与编程实现 1.1 随机数生成与蒙特卡罗模拟 1.1.2 蒙特卡罗模拟 第二章 统计建模与数据分析 2.1 统计模型实现 2.2 概率图模型 第三章 概率论在机器学习中的应用 3.1 随机森林与决策树 3.2 贝叶斯分类器 总结与展望 引言 在大数据和人工智…

学习node.js 十 redis的基本语法

redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;它提供了一个高效的键值存储解决方案&#xff0c;并支持多种数据结构&#xff0c;如字符串&#xff08;Strings&#xff09;、哈希&#xff08;Hashes&#xff09;、…

素数之和(c语言)

1./描述 //牛牛刚刚学了素数的定义&#xff1a;素数值指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数 //牛牛想知道在[l, r] 范围内全部素数的和 //输入描述&#xff1a; //输入两个正整数 l&#xff0c;r 表示闭区间范围 //输出描述&#xff1a; //…

sqli-labs靶场通关攻略 46-50

主页有sqli-labs靶场通关攻略 1-45 第四六关 less-46 步骤一&#xff1a;利用报错注入查询库 ?sort1 and updatexml(1,concat(0x7e,database(),0x7e),1) 步骤二&#xff1a;查询表名 ?sort1 and updatexml(1,concat(0x7e,(select group_concat(table_name)from informatio…

如何通过日志或gv$sql_audit,分析OceanBase运行时的异常SQL

本文作者&#xff1a;郑增权&#xff0c;爱可生 DBA 团队成员&#xff0c;OceanBase 和 MySQL 数据库技术爱好者。本文约 2000 字&#xff0c;预计阅读需要 8 分钟。 简介 在 OCP 云平台的 Top SQL 界面中&#xff0c;能观察到异常SQL&#xff0c;但这些SQL并未明确显示具体的…

防泄密的方法都有哪些?

一、防泄密的方法都有哪些&#xff1f;使用安全通讯工具&#xff1a;采用加密通讯工具&#xff0c;确保敏感信息在传输过程中不被窃取或篡改。定期安全审计&#xff1a;对系统和数据进行定期的安全审计和检查&#xff0c;发现潜在的泄密风险并及时处理。文件加密&#xff1a;对…

光伏电站的施工步骤

施工准备&#xff1a;在施工前&#xff0c;需要进行现场勘查&#xff0c;了解施工场地的地形、地貌、气候等情况&#xff0c;制定施工方案和安全措施。同时&#xff0c;还需要准备好施工所需的材料和设备&#xff0c;如光伏组件、支架、电缆、逆变器等 。基础施工&#xff1a;根…

“面试宝典:高频算法题目详解与总结”

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

鸿蒙Harmony开发实战:自定义圆形组件-Canvas

在采用Java配合xml布局编写鸿蒙app页面的时候&#xff0c;发现sdk自带的Image组件并不能将图片设置成圆形&#xff0c;反复了翻阅了官方API手册&#xff08;主要查阅了Compont和Image相关的API&#xff09;&#xff0c;起初发现了一个setCornerRadius方法&#xff0c;于是想着将…

高职院校人工智能训练师边缘计算实训室建设方案

一、引言 随着人工智能技术的飞速发展&#xff0c;边缘计算在提升数据处理效率、降低延迟、保护数据安全等方面展现出巨大潜力。高职院校作为技能型人才培养的重要基地&#xff0c;建设人工智能训练师边缘计算实训室&#xff0c;旨在培养掌握前沿技术、具备实战能力的复合型人才…

pnpm国内源设置

一、背景 在国内使用pnpm时&#xff0c;由于网络问题&#xff0c;经常会遇到速度慢或无法访问的问题。为了提高效率&#xff0c;可以将pnpm的源设置为国内的镜像源。以下是一些常用的国内pnpm镜像源以及如何设置它们的方法。 二、国内可用源 2.1 淘宝pnpm源 https://registry…