C#中使用System.Diagnostics.ConditionalAttribute移除無用函式呼叫
阿新 • • 發佈:2018-11-19
在以往的開發中,我們通常會使用如下程式碼來限定除錯性日誌的作用範圍:
public class XXXDebugger
{
public static void Log(object message)
{
#if UNITY_EDITOR
UnityEngine.Debug.Log(message);
#endif
}
}
然後在實際呼叫的時候同樣需要新增判斷來防止函式呼叫的開銷:
public class YYY { public void Execute() { #if UNITY_EDITOR XXXDebugger.Log("Test"); #endif } }
這樣其實非常的麻煩,假如呼叫時候沒有(或者忘了)加判斷,那麼其實依然存在一個空函式呼叫的憑白開銷:
public class ZZZ
{
public void Execute()
{
XXXDebugger.Log("Test");
}
}
使用ConditionalAttribute可以讓編譯器在條件不滿足時自動移除該函式及對其的呼叫,相當方便:
public class XXXDebugger { [Conditional("UNITY_EDITOR")] public static void Log(object message) { UnityEngine.Debug.Log(message); } } public class YYY { public void Execute() { XXXDebugger.Log("Test"); } }
這樣在非編輯器模式下,不但Log這個函式不存在,對其的呼叫也一併沒有了。簡潔清爽,簡直是處女座的最愛。