我正在尝试优化代码以加速计算并减少内存消耗。我需要存储年份和成本的数据。目前我使用固定数组来保存值。
例如,我会有一个整数数组:
integer[0] = 0,
integer[1] = 200,
integer[2] = 0,
integer[3] = 0,
integer[4] = 200,
integer[5] = 0,
...
integer[99] = 0
其中,整数[0] = 0表示2015年的成本为0美元,整数[1] = 200表示2016年成本为200美元,依此类推。由于我将数百万个这些数组保存在内存中并用于计算,因此我希望尽量减少内存和性能影响。
为了澄清,我使用数据的方式是用于制图。一旦我将成本分配给年份,我就根据它们所属的对象系列来总结数组。然后我将它们显示在一个堆积的条形图中。
有更好的存储数据的方法吗?我考虑了键值列表,所以我只存储了非零成本和年份,但我不知道这是否会有所帮助。
答案 0 :(得分:3)
使用Dictionary<int, int>
:
var costs = new Dictionary<int, int> {
{ 2014, 150 },
{ 2016, 200 },
};
它可能不会耗尽较少的内存,但你可以避免存储空条目,并且数据的含义更加明显。
答案 1 :(得分:1)
如果(1)你所做的只是求和,并且(2)不需要对任何给定值进行查找访问,而只是迭代它们,并且(3)你的值真的很稀疏,
然后像
integer[0] = 200,
integer[1] = 200,
...
结合
year[0] = 2016,
year[1] = 2019,
...
可以在不降低效率的情况下为您提供最小的内存占用。字典(哈希)会耗费内存;对于内存占用而言,数组是最经济的,如果您有一个默认值(0),可以假定为省略的年份。但这只有在你不需要进行查找时才有效,因为这个结构是O(n)练习。