Advertisements
Why does Rider DPA say that this code allocates int arrays?
>Solution :
foreach
doesn’t itself allocate anything (except space for some locals, which aren’t heap allocations in this case). It is roughly equivalent to:
int result = 0;
using (IEnumerator<int> iter = numbers.GetEnumerator()) {
while (iter.MoveNext()) {
var number = iter.Current;
result |= 1 << (number - @base);
}
}
return result;
As you can see: it has literally no direct allocations, but whatever you pass in as numbers
has 4 opportunities to do anything it chooses: GetEnumerator()
, MoveNext()
, Current
, and Dispose()
. We can’t tell you what the input numbers
is, but there’s a good chance that the tool is measuring these invisible allocations and attributing them to the foreach
.
Look at whatever numbers
is.