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

sce*_*nia 1 c# arrays dictionary

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

var myObjects = new Dictionary<string, LargeObjectClass>();
var specificObject = myObjects["identifier"];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Str*_*ior 5

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

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

此外,作为一般规则,您应该使用最简单,最易维护的方法,直到遇到性能问题.A Dictionary<>极不可能导致任何性能问题,除非您调用它数百万次.