小编给大家分享一下Unity C#中Mathf.Abs()取绝对值性能测试的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
这性能差距有点不太合理啊! 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了 即便很简单得方法也没有重新实现
官方有点偷懒了 所以性能差距才会这么大 以后要求性能高的地方要注意 老老实实写一遍 能提升不少性能
测试代码:
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部分源码:
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站


