大对象字典与数组索引字典

时间:2015-07-01 20:07:06

标签: c# arrays dictionary

我想通过字符串标识符访问大对象。我目前的方法是使用包含以下内容的词典:

var myObjects = new Dictionary<string, LargeObjectClass>();
var specificObject = myObjects["identifier"];

现在我想知道在Dictionary中存储这些大对象是否可能对性能有害,我最好使用Dictionary将索引存储到实际存储对象的数组中:

var myObjects = new LargeObjectClass[size];
var objectIndices = new Dictionary<string, int>();
var specificObject = myObjects[objectIndices["identifier"]];

如果myObjects的大小事先未知或者可能在运行时发生变化,这显然是一种糟糕的方法,但由于字典较小而且我在某处读到数组比字典更有效,我想这种方法在大小固定的情况下可能会有更好的表现。

假设对象非常大,哪种方法更有效?

1 个答案:

答案 0 :(得分:5)

在这种情况下,您最好只使用Dictionary<>。请记住,Dictionary和Array都只存储对大对象的引用,因为class实例是引用类型。因此,如果它存储int s,那么它只会比存储任何对象时略小一些。然后,你的数组本身就会存储对象引用这一事实掩盖了这个微小的差异,因此合并后的总数将占用更多的空间,而不仅仅是字典。

如果允许您完全避免使用字典,那么数组只会为您提供更好的性能。例如,如果您基于连续的int值而非string来键入对象,则可能会发生这种情况。但是在字典之上添加一个数组会在各方面都变得更糟。

此外,作为一般规则,在出现性能问题之前,应使用最简单,最易维护的方法。 Dictionary<>极不可能导致任何性能问题,除非您重复调用数百万次。