欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于Unity C# Mathf.Abs()取絕對值性能測試詳解

 更新時間:2019年04月15日 08:35:56   作者:冰封百度  
這篇文章主要給大家介紹了關于Unity C# Mathf.Abs()取絕對值性能測試的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Unity C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

之前有人提到過取絕對值時 直接寫三目運算符比用Mathf.Abs()效率高 沒覺得能高太多

今天測了一下 真是不測不知道 一測嚇一跳 直接寫三目運算符比Mathf.Abs()效率高2-3倍

這性能差距有點不太合理啊! 看下源碼發(fā)現(xiàn) 很多Mathf的方法就是多封裝了一層Math里的方法 把double型轉成float型了 即便很簡單得方法也沒有重新實現(xiàn)

官方有點偷懶了 所以性能差距才會這么大 以后要求性能高的地方要注意 老老實實寫一遍 能提升不少性能

測試代碼:

using UnityEngine;
using UnityEditor;
using System.Diagnostics;

/// <summary>
/// 執(zhí)行時間測試
/// 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);

 // 自己實現(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);

 // 三目運算符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);
 }

 // == 執(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;
 }

 // 三目運算符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部分源碼:

更高性能取絕對值方法:
http://www.dbjr.com.cn/article/159706.htm...

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • C#遞歸實現(xiàn)回文判斷算法

    C#遞歸實現(xiàn)回文判斷算法

    這篇文章主要介紹了C#遞歸實現(xiàn)回文判斷算法,方法簡單實用,需要的朋友可以參考下
    2014-10-10
  • C#設計模式之建造者模式

    C#設計模式之建造者模式

    這篇文章介紹了C#設計模式之建造者模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • DirectoryInfo引用一個相對目錄的實例

    DirectoryInfo引用一個相對目錄的實例

    這種特殊參數(shù)在Windows的命令提示符或者“運行”對話框中都可以使用,等價于DOS中的cd命令參數(shù)。直接上代碼,一看你就懂了:
    2013-04-04
  • 簡單介紹三層架構工作原理

    簡單介紹三層架構工作原理

    這篇文章介紹了三層架構的工作原理,二層與三層架構的區(qū)別,三層架構的優(yōu)劣勢。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 淺析WPF中Binding的數(shù)據(jù)校驗和類型轉換

    淺析WPF中Binding的數(shù)據(jù)校驗和類型轉換

    在WPF開發(fā)中,Binding實現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開發(fā)中,如何實現(xiàn)數(shù)據(jù)的校驗和類型轉換呢,下面就跟隨小編一起學習一下吧
    2024-03-03
  • 詳解WPF中用戶控件和自定義控件的使用

    詳解WPF中用戶控件和自定義控件的使用

    無論是在WPF中還是WinForm中,都有用戶控件(UserControl)和自定義控件(CustomControl),這兩種控件都是對已有控件的封裝,實現(xiàn)功能重用。但是兩者還是有一些區(qū)別,本文對這兩種控件進行講解
    2023-03-03
  • C#導入導出Excel數(shù)據(jù)的兩種方法

    C#導入導出Excel數(shù)據(jù)的兩種方法

    這篇文章主要為大家詳細介紹了C#導入導出Excel數(shù)據(jù)的兩種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C# 將透明圖片的非透明區(qū)域轉換成Region的實例代碼

    C# 將透明圖片的非透明區(qū)域轉換成Region的實例代碼

    以下代碼實現(xiàn)將一張帶透明度的png圖片的非透明部分轉換成Region輸出的方法,有需要的朋友可以參考一下
    2013-10-10
  • WPF+ASP.NET SignalR實現(xiàn)后臺通知功能的示例代碼

    WPF+ASP.NET SignalR實現(xiàn)后臺通知功能的示例代碼

    本文以一個簡單示例,簡述如何通過WPF+ASP.NET SignalR實現(xiàn)消息后臺通知以及數(shù)據(jù)的實時刷新,僅供學習分享使用,如有不足之處,還請指正
    2022-09-09
  • C#中DataTable實現(xiàn)篩選查詢的示例

    C#中DataTable實現(xiàn)篩選查詢的示例

    本文主要介紹了C#中DataTable實現(xiàn)篩選查詢的示例,主要是DataTable進行過濾篩選,常用的一些方法為:Select,dataview,具有一定的參考價值,感興趣的可以了解一下
    2023-04-04

最新評論