In addition to the other answers, note that a multidimensional array is allocated as one big chunky object on the heap. This has some implications:
- Some multidimensional arrays will get allocated on the Large Object Heap (LOH) where their equivalent jagged array counterparts would otherwise not have.
- The GC will need to find a single contiguous free block of memory to allocate a multidimensional array, whereas a jagged array might be able to fill in gaps caused by heap fragmentation... this isn't usually an issue in .NET because of compaction, but the LOH doesn't get compacted by default (you have to ask for it, and you have to ask every time you want it).
- You'll want to look into
<gcAllowVeryLargeObjects>
for multidimensional arrays way before the issue will ever come up if you only ever use jagged arrays.