關(guān)于Unity C# Mathf.Abs()取絕對(duì)值性能測(cè)試詳解
前言
之前有人提到過取絕對(duì)值時(shí) 直接寫三目運(yùn)算符比用Mathf.Abs()效率高 沒覺得能高太多
今天測(cè)了一下 真是不測(cè)不知道 一測(cè)嚇一跳 直接寫三目運(yùn)算符比Mathf.Abs()效率高2-3倍
這性能差距有點(diǎn)不太合理??! 看下源碼發(fā)現(xiàn) 很多Mathf的方法就是多封裝了一層Math里的方法 把double型轉(zhuǎn)成float型了 即便很簡(jiǎn)單得方法也沒有重新實(shí)現(xiàn)
官方有點(diǎn)偷懶了 所以性能差距才會(huì)這么大 以后要求性能高的地方要注意 老老實(shí)實(shí)寫一遍 能提升不少性能
測(cè)試代碼:
using UnityEngine; using UnityEditor; using System.Diagnostics; /// <summary> /// 執(zhí)行時(shí)間測(cè)試 /// 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/執(zhí)行")] private static void Execute() { watch = new Stopwatch(); // 數(shù)據(jù) 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); // 自己實(shí)現(xiàn)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); // 三目運(yùn)算符Abs watch.Reset(); watch.Start(); for (int i = 0; i < times; i++) { a = a < 0 ? -a : a; } watch.Stop(); string msg3Abs = string.Format("三目運(yùn)算符Abs: {0}s", watch.Elapsed); print(msgMathfAbs); print(msgMyAbs); print(msg3Abs); } // == 執(zhí)行次數(shù):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; } // 三目運(yùn)算符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部分源碼:
更高性能取絕對(duì)值方法:
http://www.dbjr.com.cn/article/159706.htm...
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- 使用 BenchmarkDotNet 對(duì) C# 代碼進(jìn)行基準(zhǔn)測(cè)試
- C#建立測(cè)試用例系統(tǒng)的示例代碼
- C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試
- C#使用String和StringBuilder運(yùn)行速度測(cè)試及各自常用方法簡(jiǎn)介
- 詳解C# WebApi 接口測(cè)試工具:WebApiTestClient
- c# 插入數(shù)據(jù)效率測(cè)試(mongodb)
- 京東聯(lián)盟C#接口測(cè)試示例分享
- C#/.Net 中快速批量給SQLite數(shù)據(jù)庫插入測(cè)試數(shù)據(jù)
- C#代碼性能測(cè)試類(簡(jiǎn)單實(shí)用)
- C#控制臺(tái)下測(cè)試多線程的方法
- c#測(cè)試反射性能示例
- c#測(cè)試本機(jī)sql運(yùn)算速度的代碼示例分享
- C# 單元測(cè)試全解析
相關(guān)文章
DirectoryInfo引用一個(gè)相對(duì)目錄的實(shí)例
這種特殊參數(shù)在Windows的命令提示符或者“運(yùn)行”對(duì)話框中都可以使用,等價(jià)于DOS中的cd命令參數(shù)。直接上代碼,一看你就懂了:2013-04-04淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類型轉(zhuǎn)換
在WPF開發(fā)中,Binding實(shí)現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開發(fā)中,如何實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)和類型轉(zhuǎn)換呢,下面就跟隨小編一起學(xué)習(xí)一下吧2024-03-03C#導(dǎo)入導(dǎo)出Excel數(shù)據(jù)的兩種方法
這篇文章主要為大家詳細(xì)介紹了C#導(dǎo)入導(dǎo)出Excel數(shù)據(jù)的兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03C# 將透明圖片的非透明區(qū)域轉(zhuǎn)換成Region的實(shí)例代碼
以下代碼實(shí)現(xiàn)將一張帶透明度的png圖片的非透明部分轉(zhuǎn)換成Region輸出的方法,有需要的朋友可以參考一下2013-10-10WPF+ASP.NET SignalR實(shí)現(xiàn)后臺(tái)通知功能的示例代碼
本文以一個(gè)簡(jiǎn)單示例,簡(jiǎn)述如何通過WPF+ASP.NET SignalR實(shí)現(xiàn)消息后臺(tái)通知以及數(shù)據(jù)的實(shí)時(shí)刷新,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正2022-09-09C#中DataTable實(shí)現(xiàn)篩選查詢的示例
本文主要介紹了C#中DataTable實(shí)現(xiàn)篩選查詢的示例,主要是DataTable進(jìn)行過濾篩選,常用的一些方法為:Select,dataview,具有一定的參考價(jià)值,感興趣的可以了解一下2023-04-04