首页 > 其他分享 >Unity 测试Transform cache和不cache的区别

Unity 测试Transform cache和不cache的区别

时间:2023-03-07 18:12:08浏览次数:40  
标签:TotalMilliseconds cache watch Transform private Unity Stopwatch

关于Transform的cache问题:

大致看了下:

https://forum.unity.com/threads/cache-transform-really-needed.356875/

Transform cache的却会好一点点

 

有种Lazy的方式 可以在使用的时候lazy cache 去get  :

Lazy<Transform> _cameraTransform = new Lazy<Transform>(() => Camera.main.transform);

 

不过。。。。

在开发期 也许不需要太关注这件事情,而且cache后由于赋值顺序问题 也许还要处理一些logic的bug。  最后依Profiler为准, 并先处理大头的overhead。大概率在Profiler的前期是轮不到Transform 。。。

 

 

测试的结果:

result:

Not much difference 10000 times:
No caching:
TotalMilliseconds:1.6433
Caching:
TotalMilliseconds:0.5658

little different:
100000 times:
TotalMilliseconds:14.2513
TotalMilliseconds:5.1719

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using System.Diagnostics;
 4 using UnityEngine;
 5 
 6 public class TestTransformWithCache : MonoBehaviour
 7 {
 8     private Transform myCameraCacheTransform;
 9     [SerializeField] private uint calls;
10  
11     private void Start() {
12         myCameraCacheTransform = Camera.main.transform;
13         print("No caching:");
14         Stopwatch watch = new Stopwatch();
15         watch.Start();
16         for (uint i = 0; i < calls; i++) TestNoCache();
17         watch.Stop();
18         print("TotalMilliseconds:"+ watch.Elapsed.TotalMilliseconds);
19         
20         print("Caching:");
21         Stopwatch watch2 = new Stopwatch();
22         watch2.Start();
23         for (uint i = 0; i < calls; i++) TestCache();
24         watch2.Stop();
25         print("TotalMilliseconds:"+ watch2.Elapsed.TotalMilliseconds);
26     }
27  
28     private void TestNoCache() {
29         Vector3 v = Vector3.zero;
30         v = Camera.main.transform.position;
31     }
32  
33     private void TestCache() {
34         Vector3 v = Vector3.zero;
35         v = myCameraCacheTransform.position;
36     }
37 }

 

标签:TotalMilliseconds,cache,watch,Transform,private,Unity,Stopwatch
From: https://www.cnblogs.com/sun-shadow/p/17189030.html

相关文章

  • 日本国土交通部在Unity商店发布“全日本城市3D模型”,全部免费用!
    日本国土交通部在Unity商店发布“全日本城市3D模型”,全部免费用!投递人 itwriter 发布于 2023-03-0312:20 评论(0) 有2076人阅读 原文链接 [收藏] « »......
  • 【MRTK】解决 Unity.IL2CPP.Building.BuilderFailedException: Lump_libil2cpp_vm.cpp
    前言最近在部署HoloLens应用的时候遇到了这个报错,无论是本地部署、远程部署、还是导出APPX项目包,都会遇到这个问题从而导致生成错误我在中文平台搜索没有找到答案,于......
  • Unity开发时,在visual studio编辑器中没有中文注释的解决办法
    在做Unity开发的时候,会遇到很多标准库或.Net库里的一些函数都没有注释,但是用VS单独创建一个WinForms桌面类型的程序,里面调用的都是有中文注释的。下面是步骤:使用VS创建......
  • Unity package manager 字体乱码
     具体原因是升级Mac系统导致,暂行方案是Playersettings取消勾选AutoGraphicsAPIforMac,改为优先使用OpenGLCore,重启编辑器就好了......
  • Flappybird(基于Unity)修改与完善
    项目分析在引擎中运行原游戏这是一个经典的游戏FlappyBird。在游戏中,我们需要点击空格键来使角色向上飞行来避开管道(障碍物),而不让小鸟碰到这些障碍物或飞出屏幕。游戏......
  • unity3D设置Target位置和怪物类型18
    设置每一组target怪物的编号TargetManager//18.设置target编号publicinttargetPosition;设置每一个怪物的编号MonsterManager//13.设置怪物的编号publ......
  • unity3D存储音乐的开关状态17
    存储背景音乐开关的状态usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;//2.获得UIusingUnityEngine.UI;publicclassUIManager......
  • unity3D游戏存档与读档16
    Unity中使用的存档方式PlayerPrefs:数据持久化方案采用键值对的方式对数据进行存储PlayPrefs.SetInt("Index",1);可以存储IntFloatString类型的数据PlayPrefs.S......
  • unity3D游戏音效开关设置16
    得到背景音乐选框赋值赋值usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;//2.获得UIusingUnityEngine.UI;publicclassUI......
  • Ehcache初体验
    前言读张开涛写的《亿级流量网站架构核心技术》里面讲到使用Java缓存:堆内缓存,堆外缓存,磁盘缓存,分布式缓存。介绍了几种缓存工具:GauvaCache,Ehcache和MapDB。其中Gauva......