Écrire du code HasFlag lisible en minimisant la surcharge à l’exécution en C#
(github.com/KBluePurple)Contexte de développement
Ce package a été développé pour éviter facilement la création de garbage due au boxing chaque fois qu’on utilise HasFlag sur les enums de base en C#, notamment lors du développement de jeux Unity.
Fonctionnement
À l’aide d’un Source Generator, il repère à la compilation les déclarations d’enum portant l’attribut [Flag] et génère automatiquement une méthode d’extension personnalisée HasFlagNonAlloc.
Fonctionnalités
Il devient possible d’écrire du code HasFlag lisible avec une surcharge à l’exécution proche de zéro.
var currentState = PlayerState.Idle | PlayerState.Walking;
// HasFlag existant (boxing)
if (currentState.HasFlag(PlayerState.Idle))
{
// ...
}
// Implémentation d’une vérification HasFlag qui évite le boxing
if ((currentState & PlayerState.Idle) == PlayerState.Idle)
{
// ...
}
// Après l’installation de NonAllocFlagGenerator
if (currentState.HasFlagNonAlloc(PlayerState.Idle))
{
// ...
}
C’est mon premier vrai projet open source, donc il lui manque encore beaucoup de choses, mais je me lance avec courage pour le partager.
J’espère qu’il sera utile à celles et ceux qui écrivent du code sensible aux performances.
Tous les retours sont les bienvenus !
Aucun commentaire pour le moment.