当前位置:网站首页>unity 和C# 一些官方优化资料
unity 和C# 一些官方优化资料
2022-08-02 14:12:00 【FatherOfCodingMan】
Fixing Performance Problems - 2019.3 - Unity Learn 这里面有很详细的内容,诊断问题,平时写代码如何写得更好一些,哪些接口要注意,CPU GPU 的都有说到, 有60多个条目。
Unity - Manual: Special optimizations
Unity - Manual: General Optimizations
Best Practices for Comparing Strings in .NET | Microsoft Docs
Best Practices for Regular Expressions in .NET | Microsoft Docs
一些对我有用的内容
2、诊断性能问题出现在哪?CPU, GPU,内存,IO 用工具发现问题然后是解决问题。
4、需要知道的是机器运行的是机器码或本地码(machine code or native code),由此C#需要先编译成Common intermediate language(CIL) 中间语言,第二步是打包游戏(ahead of time compilation or AOT compilation)或者是在目标机器需要运行时才编译Just in-time compilation or JIT compilation。
5、写得好的代码才能编译出好的机器码
6、Unity引擎代码和游戏逻辑代码的通信。Unity引擎代码是C++代码,已经被编译成能运行的native code,我们写的C#代码编译成CIL,作为managed code,两种语言的切换是需要代价的,C#调用了引擎接口,引擎将结果返回,就要经过上下文切换,但也不是很严重。
10、写出好的代码,如果for里面有条件语句,如果可以的话,尽量提取到外面 。减少没用的重复代码。尽量不要每帧执行,在有变化时才执行。有些逻辑不用每帧执行,为不同系统分配刚好满足的帧率,可以有几个做队列,队列里放要update的对象,队列在不同帧依次执行。考虑如何让CPU的缓存有更高的命中,少跳转,同一逻辑对连续的数据处理(ECS的相碰实现)。有些结果使用缓存。
14、用对的数据结构。
16、使用对象池减少GC的影响。要控制好内存池的大小,长时间利用率低的话会浪费内存,也给GC增加压力。
17、避免使用耗性能的API.
SendMessage
Find, 适当使用缓存
Transform 的设值, 比如不要transform.position.x = 1;transform.position.y = 2;transform.position.z = 3;要transform.position = new Vector3(1,2,3);(这里尽量不要每次去new吧)。
Update 等函数,空着的就删掉,尽量不要每个脚本自己写个update,尽量是由统一的manager来update.
Camera.main 其实它内部是与Find相似,查找第一个tagged with "Main Camera"的camera。
剔除 ,万物皆可Culling,看具体情况。
LOD, level of detail ,同理,万物皆可LOD,AI等逻辑。
24、内存管理
40、减少boxing, string.Format 等函数包含params[] 参数会将值类型数据先boxing,从而引起gc。可以用 StringBuilder 。
coroutines:
yield return 0;会引起boxing,这时可以用yield return null;
// bad
while (!isComplete)
{
yield return new WaitForSeconds(1f); // gc不友好,应改成下面形式
}
// good
WaitForSeconds delay = new WaitForSeconds(1f);
while (!isComplete)
{
yield return delay;
}
边栏推荐
猜你喜欢
随机推荐
Mysql lock
Knapsack Problem - Dynamic Programming - Theory
【STM32学习1】基础知识与概念明晰
1.开发社区首页,注册
推开机电的大门《电路》(三):说说不一样的电阻与电导
Installation and configuration of Spark and related ecological components - quick recall
Flink + sklearn - use JPMML implement flink deployment on machine learning model
Based on the least squares linear regression equation coefficient estimation
十天学习Unity3D脚本(一)九个回调
[STM32 Learning 1] Basic knowledge and concepts are clear
软件测试基础知识(背)
Unity插件-NGUI
golang之GMP调度模型
2. Log out, log in state examination, verification code
casbin模型
Use libcurl to upload the image of Opencv Mat to the file server, based on two methods of post request and ftp protocol
队列与栈
Exotic curiosity-a solution looking - bit operations
C语言函数参数传递模式入门详解
一篇文章彻底理解Redis的持久化:RDB、AOF