在C#数组中有空索引是一种糟糕的做法吗?

在C#数组中有空索引是一种糟糕的做法吗?,c#,C#,我有一个C#中的2D数组,它保存了数百个对象的数据。如果我用于填充数据的数组索引值以大于0的值开始,将其前面的索引保留为空,那么我是否会丢失所有空数组空间的性能 例如,如果我有一个数组: Object[,] objectArray = new Object[1000, 1000]; 我用对象填充索引x:500-999&&y:500-999,并将索引0-499保留为空,我是在丢失性能或内存,还是可以忽略不计 我可能需要在将来程序运行时使用索引,但在程序的大部分生命周期中,它们将是空的。(对于上下

我有一个C#中的2D数组,它保存了数百个对象的数据。如果我用于填充数据的数组索引值以大于0的值开始,将其前面的索引保留为空,那么我是否会丢失所有空数组空间的性能

例如,如果我有一个数组:

Object[,] objectArray = new Object[1000, 1000];
我用对象填充索引x:500-999&&y:500-999,并将索引0-499保留为空,我是在丢失性能或内存,还是可以忽略不计

我可能需要在将来程序运行时使用索引,但在程序的大部分生命周期中,它们将是空的。(对于上下文,空格用于游戏中玩家可以使用索引作为坐标探索的瓷砖)

我是否应该创建一个新数组并在需要时填充它


编辑为更具体地针对我的情况。

不,您并没有失去性能,只是可以忽略不计的内存量


事实上,只要你有内存,这样的数组比欺骗更小的数组更有效。(每个对象大约有8-16字节。)

这就是
List
解决的问题。为什么不使用列表呢?糟糕的做法(实际上是非常糟糕的做法)是使用
对象而不是特定类型。像这样的空索引是对内存的浪费,除非有可能需要它们。在这种情况下,他们会。这就留下了使用
object
的坏习惯,这完全取决于您在数组上执行的操作。对阵列的每次扫描都将对未使用的元素进行扫描。您可能会考虑使用<代码> dICONORIONS <代码>。现在,这个数组需要8KB。那不是很多记忆。从一开始就分配它将避免以后重新分配和垃圾对象。不要这样做。细节很重要,尤其是在如此精细的水平上询问性能时。这使得使用
object
变得更糟糕-您必须启用每一个访问才能使用存储在那里的任何内容。如果存储结构,将失去值对象的好处,因为它们必须装箱