服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 关于Unity C# Mathf.Abs()取绝对值性能测试详解

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

2022-07-20 12:04冰封百度 C#

这篇文章主要给大家介绍了关于Unity C# Mathf.Abs()取绝对值性能测试的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Unity C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

之前有人提到过取绝对值时 直接写三目运算符比用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://segmentfault.com/a/1190000018764346

延伸 · 阅读

精彩推荐
  • C#Unity3D仿写Button面板事件绑定功能

    Unity3D仿写Button面板事件绑定功能

    这篇文章主要为大家详细介绍了Unity3D仿写Button面板事件绑定功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    qq_339945667532022-03-10
  • C#C#中Winform 实现Ajax效果自定义按钮

    C#中Winform 实现Ajax效果自定义按钮

    这篇文章主要介绍了C#中Winform 实现Ajax效果自定义按钮的相关资料,需要的朋友可以参考下...

    数据酷软件8992022-02-17
  • C#C#隐式/显示实现接口方法详解

    C#隐式/显示实现接口方法详解

    这篇文章主要为大家详细介绍了C#隐式/显示实现接口方法,接口的使用场景介绍,感兴趣的小伙伴们可以参考一下...

    我是攻城狮9482021-11-16
  • C#C# 抽象类,抽象属性,抽象方法(实例讲解)

    C# 抽象类,抽象属性,抽象方法(实例讲解)

    下面小编就为大家分享一篇C# 抽象类,抽象属性,抽象方法的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    SuperShen11452022-02-17
  • C#C#实现闪动托盘图标效果的方法

    C#实现闪动托盘图标效果的方法

    这篇文章主要介绍了C#实现闪动托盘图标效果的方法,涉及C# ImageList控件的使用技巧,需要的朋友可以参考下...

    冇一朵小尐尒尕尗尛尜5362021-11-24
  • C#C# TSC打印二维码和条形码的实现方法

    C# TSC打印二维码和条形码的实现方法

    下面小编就为大家分享一篇C# TSC打印二维码和条形码的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    叶长种6912022-02-17
  • C#C#获取硬盘序列号的问题小结

    C#获取硬盘序列号的问题小结

    本文给大家分享C#获取硬盘序列号的问题及解决方法,非常不错,需要的朋友参考下...

    青春日记8922021-12-16
  • C#C#编程自学之运算符和表达式

    C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...

    C#教程网4522021-10-29