关于Unity C# Mathf.Abs()取绝对值性能测试详解

作者:冰封百度 时间:2022-01-28 04:47:58 

前言

之前有人提到过取绝对值时 直接写三目运算符比用Mathf.Abs()效率高 没觉得能高太多

今天测了一下 真是不测不知道 一测吓一跳 直接写三目运算符比Mathf.Abs()效率高2-3倍

这性能差距有点不太合理啊! 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了 即便很简单得方法也没有重新实现

官方有点偷懒了 所以性能差距才会这么大 以后要求性能高的地方要注意 老老实实写一遍 能提升不少性能

关于Unity C# Mathf.Abs()取绝对值性能测试详解

测试代码:


using UnityEngine;
using UnityEditor;
using System.Diagnostics;

/// <summary>
/// 执行时间测试
/// ZhangYu 2019-04-04
/// </summary>
public class TimeTest : MonoBehaviour {

public int executeTimes = 1;
private static Stopwatch watch;

private void OnValidate() {
times = executeTimes;
}

private static int times = 1;
[MenuItem("CONTEXT/TimeTest/执行")]
private static void Execute() {
watch = new Stopwatch();

// 数据
float a = 1;

// Mathf.Abs
watch.Reset();
watch.Start();
for (int i = 0; i < times; i++) {
a = Mathf.Abs(a);
}
watch.Stop();
string msgMathfAbs = string.Format("Mathf.Abs: {0}s", watch.Elapsed);

// 自己实现Abs
watch.Reset();
watch.Start();
for (int i = 0; i < times; i++) {
a = MyAbs(a);
}
watch.Stop();
string msgMyAbs = string.Format("自定义Abs: {0}s", watch.Elapsed);

// 三目运算符Abs
watch.Reset();
watch.Start();
for (int i = 0; i < times; i++) {
a = a < 0 ? -a : a;
}
watch.Stop();
string msg3Abs = string.Format("三目运算符Abs: {0}s", watch.Elapsed);

print(msgMathfAbs);
print(msgMyAbs);
print(msg3Abs);
}

// == 执行次数:10000000

// Mathf.Abs
// (1)0.2803558s
// (2)0.2837749s
// (3)0.2831089s
// (4)0.2829929s
// (5)0.2839846s

// 自定义Abs
// (1)0.2162217s
// (2)0.2103635s
// (3)0.2103390s
// (4)0.2092863s
// (5)0.2097648s
private static float MyAbs(float a) {
return a < 0 ? -a : a;
}

// 三目运算符Abs
// (1)0.0893028s
// (2)0.1000181s
// (3)0.1017959s
// (4)0.1001749s
// (5)0.1005737s

}

Mathf.Abs()源码:


// Returns the absolute value of /f/.
public static float Abs(float f) { return (float)Math.Abs(f); }

// Returns the absolute value of /value/.
public static int Abs(int value) { return Math.Abs(value); }

官方Mathf部分源码:

关于Unity C# Mathf.Abs()取绝对值性能测试详解

关于Unity C# Mathf.Abs()取绝对值性能测试详解

更高性能取绝对值方法:
https://www.jb51.net/article/159706.htm...

来源:https://segmentfault.com/a/1190000018764346

标签:unity,c#,mathf.abs()
0
投稿

猜你喜欢

  • springboot过滤器和拦截器的实例代码

    2021-09-14 04:53:17
  • C#中Equality和Identity浅析

    2022-10-11 10:43:38
  • 解决IDEA中快捷键Alt+Enter不能使用的问题

    2022-09-14 07:54:07
  • http协议进阶之Transfer-Encoding和HttpCore实现详解

    2023-11-03 14:22:05
  • Android listview的滑动冲突解决方法

    2022-07-19 02:50:59
  • C#中static静态变量的用法实例

    2022-12-16 07:47:44
  • Android使用AutoCompleteTextView实现自动填充功能的案例

    2023-03-26 06:56:47
  • 关于Java中增强for循环使用的注意事项

    2021-08-09 16:47:43
  • C# [ImportDll()] 知识小结

    2022-09-15 07:42:18
  • Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】

    2023-05-10 23:27:41
  • Java JDK动态代理实现原理实例解析

    2022-04-23 05:19:10
  • Java注解Annotation原理及自定义注解代码实例

    2023-04-30 10:18:09
  • Android桌面插件App Widget用法分析

    2022-02-05 02:26:39
  • Android实现抽奖转盘实例代码

    2021-08-22 20:03:35
  • JavaWeb项目Servlet无法访问问题解决

    2022-10-10 03:33:52
  • 对dbunit进行mybatis DAO层Excel单元测试(必看篇)

    2023-08-19 02:37:19
  • 一文详解C++模板和泛型编程

    2022-12-28 09:40:46
  • 如何用C#找出数组中只出现了一次的数字

    2021-06-15 15:42:56
  • C# WebApi 路由机制剖析

    2022-01-23 05:20:16
  • 详解eclipse下创建第一个spring boot项目

    2022-01-02 10:36:13
  • asp之家 软件编程 m.aspxhome.com