【发布时间】:2015-07-01 20:07:06
【问题描述】:
我有想要通过字符串标识符访问的大型对象。我目前的方法是使用包含以下内容的字典:
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 的大小事先未知或可能在运行时发生变化,这显然是一种不好的方法,但由于字典更小,而且我在某处读到数组比字典更有效,我认为这种方法可能有在大小固定的情况下性能更好。
假设对象非常大,这些方法中哪一种更有效?
【问题讨论】:
-
为什么不自己测试一下呢?那你肯定会知道的。
-
在Dictionnary
中,对象只是对原始对象的引用。对象没有被克隆。使用 int 代替对象“地址”提供了小的内存优势,因为 int 小于对象引用。但是,它在性能方面更有效,因为跳过了一个间接。但是,所有的好处/坏处都不是很重要。作为结论,请保留您的第一种方法,即对象字典。 -
@Graffito:在字典中使用整数会使字典本身更小,但是向必须存储所有对象引用的数组添加一个数组只会再次增加所有节省的空间,对吗?跨度>
-
@StriplingWarrior:在场景代码中,对象存储在数组中,因此已经创建。
-
@StriplingWarrior:我读剧本的速度太快了。我对“实际存储对象的数组”感到困惑。我错误地假设对象最初是在数组(或列表)中加载的,并且字典用于创建索引。道歉...
标签: c# arrays dictionary