In C# lesbaren HasFlag-Code schreiben und dabei den Runtime-Overhead minimieren
(github.com/KBluePurple)Entwicklungshintergrund
Dieses Paket wurde entwickelt, um beim Entwickeln von Unity-Spielen oder bei der Verwendung von C# die durch Boxing entstehende Garbage-Erzeugung beim Einsatz von Enum.HasFlag einfach zu vermeiden.
Funktionsweise
Mithilfe eines Source Generators werden zur Compile-Zeit in den Codebasen enum-Deklarationen mit [Flag] gefunden und automatisch benutzerdefinierte Erweiterungsmethoden HasFlagNonAlloc erzeugt.
Funktionen
Damit lässt sich HasFlag-Code mit nahezu null Runtime-Overhead lesbar schreiben.
var currentState = PlayerState.Idle | PlayerState.Walking;
// Bisheriges HasFlag (Boxing tritt auf)
if (currentState.HasFlag(PlayerState.Idle))
{
// ...
}
// Implementierung einer HasFlag-Prüfung, die Boxing vermeidet
if ((currentState & PlayerState.Idle) == PlayerState.Idle)
{
// ...
}
// Nach der Installation von NonAllocFlagGenerator
if (currentState.HasFlagNonAlloc(PlayerState.Idle))
{
// ...
}
Dies ist mein erstes richtiges(?) Open-Source-Projekt, daher gibt es noch vieles, was unzureichend ist, aber ich habe mir ein Herz gefasst und es veröffentlicht!
Ich hoffe, es ist hilfreich, wenn ihr performancekritischen Code schreibt.
Feedback ist jederzeit willkommen!
Noch keine Kommentare.