Calls to Enum.HasFlag are being marked as causing boxing allocations in my .NET 6 project, but this isn't true since at least .NET Core 3.1:
[MemoryDiagnoser]
[SimpleJob(RuntimeMoniker.Net48)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
public class EnumBench {
[Flags]
private enum A {
One,
Two,
}
[Benchmark]
public void HasFlag() {
var val = A.One;
for (var i = 0; i < 1_000_000; i++) {
_ = val.HasFlag(A.Two);
}
}
}
Gives the result:
| Method | Job | Runtime | Mean | Error | StdDev | Gen 0 | Allocated |
|-------- |------------------- |------------------- |------------:|----------:|----------:|----------:|-------------:|
| HasFlag | .NET Core 3.1 | .NET Core 3.1 | 220.7 us | 1.08 us | 1.01 us | - | - |
| HasFlag | .NET Framework 4.8 | .NET Framework 4.8 | 16,083.7 us | 224.69 us | 210.18 us | 7625.0000 | 48,141,422 B |
Calls to
Enum.HasFlag
are being marked as causing boxing allocations in my .NET 6 project, but this isn't true since at least .NET Core 3.1:Gives the result: