เขียนโค้ด HasFlag ที่อ่านง่ายใน C# พร้อมลด runtime overhead ให้เหลือน้อยที่สุด
(github.com/KBluePurple)ที่มาของการพัฒนา
แพ็กเกจนี้ถูกพัฒนาขึ้นเพื่อให้สามารถหลีกเลี่ยงการสร้าง garbage จาก Boxing ได้อย่างง่ายดาย ทุกครั้งที่พัฒนาเกมด้วย Unity หรือใช้งาน C# แล้วต้องใช้ Enum แบบพื้นฐานของ HasFlag!
วิธีการทำงาน
ใช้ Source Generator เพื่อค้นหา declaration ของ enum ที่มี [Flag] อยู่ในโค้ดระหว่าง compile time แล้วสร้าง extension method แบบกำหนดเองชื่อ HasFlagNonAlloc ขึ้นมาโดยอัตโนมัติ
ฟีเจอร์
ช่วยให้เขียนโค้ด HasFlag ได้อ่านง่าย พร้อมมี runtime overhead ที่แทบจะเป็นศูนย์!
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))
{
// ...
}
นี่เป็นโปรเจกต์โอเพนซอร์สที่จริงจังโปรเจกต์แรกที่ผมทำ(?) จึงอาจยังมีส่วนที่ไม่สมบูรณ์อยู่มาก แต่ก็ตัดสินใจรวบรวมความกล้ามาโพสต์ครับ!
หวังว่าจะเป็นประโยชน์เมื่อคุณต้องเขียนโค้ดที่ไวต่อประสิทธิภาพ
ยินดีรับฟีดแบ็กเสมอครับ!
ยังไม่มีความคิดเห็น