本篇内容主要来自Unity官方手册: 
一般性能优化

一些地方为本人瞎编杜撰,请酌情参考。如有错误,欢迎指出。


Unity里C#编程虽然既简单还很爽,但是性能小陷阱还不少。我总强迫自己让代码最优,因此很留意这些细节。这里我记录了一下最近发现的一下优化点。

 

协程 别嵌套

协程( Coroutine )固然爽,我用起来可得心应手了,刷刷刷,平滑动画,等待加载,定时启动……

官方的意见是:

  • 在可能的情况下,最好将一系列操作压缩到尽可能少协程。虽然嵌套协程非常适合代码清晰度和维护,但由于协程跟踪对象,它们会产生更高的内存开销。
  • 如果一个协同程序几乎每帧都运行并且在长时间运行的操作中不会新产生,那么用一个Update或者LateUpdate回调替换它通常更具可读性。对于长期运行或无限循环的协同程序尤其如此。

object == null 很昂贵

UnityEngine.Object子类的实例与null进行比较的成本比与纯C#类的比较要昂贵得多。因此,请避免在紧密循环或每帧运行的代码中进行这些空比较。

颜色字符串转换用ColorUtility

对于HTML格式的颜色字符串(#RRGGBBAA)到Unity内Color的转换,比起自己写代码,内置的ColorUtility API 更好,内存分配更少。

数据结构自带的常量并不会节约GC

这个我也挺迷惑的。数据结构自带的常量其实是属性里写好的返回值。

例如Vector3.zero的属性体为:get { return new Vector3(0,0,0); }

因此 Vector3.zero 并不会比 new Vector3(0,0,0) 更快。

Find和FindObjectOfType很慢

随着场景物体增加,这个方法只会越来越慢。

Camera.main 实际上用的类似的方式( FindObjectWithTag ),要用的话还是先缓存一个变量。

 

其他的之后想起再补充……

 

还有一些代码快了,人也苦了的优化点

交错数组更快?

一般的多维数组是:int[ , ] arrray = new int[x, y];

交错数组是像这样:int[][] arrray = new int[x][ ];

此外,多维数组据用array.length 获取全部元素数量,array.Get Length(0)获取某个维度的长度,而交错数组则通过array.length 获取第一维长度,array[0].length获取下一维某元素的长度。

理论上多维数组应该更快,但是按照编译结果,交错数组反而快不少。(说明

虽然交错数组是可能是快些,不过很多情况下会让代码很绕人(例如上面获取长度的解释你看懂了吗 : D ),所以要使用还要权衡一下。

方法调用能少就少

所有语言通用,但是没有方法的代码是没有灵魂的。

Unity 3D中C#的性能优化小陷阱的更多相关文章

  1. .NET性能优化小技巧

    .NET 性能优化小技巧 Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 HttpClient 优化 关于使用 Htt ...

  2. Unity 3D中的阴影设置

    在Unity 3D中,经常需要用到光照阴影,即Directional Light的Shadow,Shadow分为Hard Shadow和Soft Shadow.区别是Soft Shadow的阴影边缘比 ...

  3. 在Unity 3D中加入Image图片

    在Unity 3D中加入Image图片,我在刚开始是加不进去的,为什么呢?因为没有图片,图如下: 原因就是我们没有把图片设置为Script,图片的格式还是默认的那个,这只能作为贴图使用.我们将图片进行 ...

  4. Unity 3D中不得不说的yield协程与消息传递

    1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这 ...

  5. vue中关于v-for性能优化---track-by属性

    vue中关于v-for性能优化---track-by属性 最近看了一些react,angular,Vue三者的对比文章,对比来说Vue比较突出的是轻量级与易上手. 对比Vue与angular,Vue有 ...

  6. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  7. 小师妹学JVM之:JDK14中JVM的性能优化

    目录 简介 String压缩 分层编译(Tiered Compilation) Code Cache分层 新的JIT编译器Graal 前置编译 压缩对象指针 Zero-Based 压缩指针 Escap ...

  8. Unity3D性能优化小tips——把this.transform缓存缓存起来

    Unity3D开发时中有一个小tips,这在官方的文档里其实有提及的,但不那么显眼,这里小说一下: 在MonoBehaviour进行编程时,我们经常会用this.transform, this.gam ...

  9. 摘:JavaScript性能优化小知识总结

    原文地址:http://www.codeceo.com/article/javascript-performance-tips.html JavaScript的性能问题不容小觑,这就需要我们开发人员在 ...

随机推荐

  1. 正睿OI集训游记

    什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...

  2. 一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包

    欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人网站: https://www.exception.site/essay/create-tar-gz-by-j ...

  3. 当 Redis 发生高延迟时,到底发生了什么

    Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解 ...

  4. PWM呼吸灯

    1.PWM简介       PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技 ...

  5. 在ubuntu中编译内核是用make menuconfig报错:package 'ncurses' has n

    执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...

  6. svg自适应写法

    svg自适应写法<pre><!DOCTYPE html><html lang="en"> <head> <meta chars ...

  7. MyBatis直接执行sql语句mapper

    <select id="queryBySql" resultType="HashMap"> <![CDATA[ ${sql} ]]> & ...

  8. lqb 入门训练 序列求和 (PS:用长整数做数据的输入输出)

    入门训练 序列求和 时间限制:1.0s   内存限制:256.0MB     问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3 ...

  9. nyoj 168-房间安排 (贪心)

    168-房间安排 内存限制:64MB 时间限制:3000ms 特判: No 通过数:33 提交数:71 难度:2 题目描述: 2010年上海世界博览会(Expo2010),是第41届世界博览会.于20 ...

  10. 编写自定义cmake配置文件FindXXX.cmake或者xxx-config.cmake | cmake with user defined entry

    本文首发于个人博客https://kezunlin.me/post/12ab5707/,欢迎阅读! cmake with user defined entry Guide FindXXX.cmake ...