C# में runtime overhead को न्यूनतम रखते हुए readable HasFlag code लिखना
(github.com/KBluePurple)डेवलपमेंट की पृष्ठभूमि
यह पैकेज Unity गेम डेवलप करते समय या C# का उपयोग करते हुए बेसिक Enum के HasFlag को हर बार इस्तेमाल करने पर Boxing की वजह से बनने वाले garbage को आसानी से रोकने के लिए बनाया गया है!
काम करने का तरीका
Source Generator का उपयोग करके compile time पर कोड में [Flag] वाले enum declarations को ढूंढा जाता है और custom HasFlagNonAlloc extension methods अपने-आप generate किए जाते हैं।
फीचर्स
इससे लगभग zero के करीब runtime overhead के साथ HasFlag को readable तरीके से लिखा जा सकता है!
var currentState = PlayerState.Idle | PlayerState.Walking;
// 기존 HasFlag (Boxing 발생)
if (currentState.HasFlag(PlayerState.Idle))
{
// ...
}
// Boxing 을 피하는 HasFlag 체크 구현
if ((currentState & PlayerState.Idle) == PlayerState.Idle)
{
// ...
}
// NonAllocFlagGenerator 설치 이후
if (currentState.HasFlagNonAlloc(PlayerState.Idle))
{
// ...
}
यह मेरा पहला ठीक-ठाक(?) open source प्रोजेक्ट है, इसलिए इसमें अभी काफी कमियाँ हो सकती हैं, लेकिन हिम्मत करके इसे साझा कर रहा हूँ!
उम्मीद है कि performance-sensitive code लिखते समय यह मददगार होगा।
फ़ीडबैक का हमेशा स्वागत है!
अभी कोई टिप्पणी नहीं है.