IReadOnly***系のパフォーマンス危険性について

最適化

IReadOnlyCollectionIReadOnlyListはリストのSet, Clear系を使えなくできるため堅牢なコードにつながります。Unity C#のバージョンが上がるのを楽しみにしてた理由の一つです。

ですがこのinterfaceはパフォーマンスという視点では危険をはらんでいます。

JacksonDunstan.com | 5 Common Misuses of Collections
JacksonDunstan.com covers game programming

foreachでGCalloc

またかよって感じですが、残念ながら余裕でgcallocします。どうしようもないです。Unity2019.3.0b9 IL2CPP

対策

IReadOnlyListforループならgc allocは発生しません。なのでIReadOnlyCollectionを使わず、IReadOnlyListだけ使うようにしましょう