Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why does foreach allocate int arrays in C#?

Why does Rider DPA say that this code allocates int arrays?

enter image description here

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading