C#でランタイムオーバーヘッドを最小限に抑えつつ読みやすいHasFlagコードを書く
(github.com/KBluePurple)開発背景
Unityゲームを開発したり、C#で標準のEnumのHasFlagを使うたびに、Boxingによってガベージが生成されるのを手軽に防ぐために開発したパッケージです!
動作方式
Source Generatorを利用し、コンパイル時にコードの中から[Flag]を持つenum宣言を見つけて、カスタムのHasFlagNonAlloc拡張メソッドを自動生成します。
機能
ほぼゼロに近いランタイムオーバーヘッドで、読みやすいHasFlagコードを書けるようになります!
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))
{
// ...
}
初めて作る本格的な(?)オープンソースプロジェクトなので至らない点も多いですが、思い切って公開してみます!
性能に敏感なコードを書くときに役立てばうれしいです。
フィードバックはいつでも歓迎です!
まだコメントはありません。