C#交错数组与字典

C#交错数组与字典,c#,.net,performance,dictionary,C#,.net,Performance,Dictionary,当前三种情况下的内存/速度是什么样的? 我没有看到过很多关于用这种方式使用字典的讨论 但是,如果字典具有超快的查找速度,那么对于查找/访问比添加多得多的场景,两种字典实现不是都更理想吗 var数组=新字符串[100][200][100]; 对于(变量x=0;x

当前三种情况下的内存/速度是什么样的? 我没有看到过很多关于用这种方式使用字典的讨论

但是,如果字典具有超快的查找速度,那么对于查找/访问比添加多得多的场景,两种字典实现不是都更理想吗

var数组=新字符串[100][200][100];
对于(变量x=0;x<100;x++)
对于(变量y=0;y<200;y++)
对于(var z=0;z<300;z++)
数组[x][y][z]=“完成”;
对于(变量x=0;x<100;x++)
对于(变量y=0;y<200;y++)
对于(var z=0;z<300;z++)
Console.Write(数组[x][y][z]);
vs

var dictionary=newdictionary();
对于(变量x=0;x<100;x++)
对于(变量y=0;y<200;y++)
对于(var z=0;z<300;z++)
字典[x][y][z]=“完成”;
对于(变量x=0;x<100;x++)
对于(变量y=0;y<200;y++)
对于(var z=0;z<300;z++)
Console.Write(字典[x][y][z]);
vs

struct Vector3
{
公共int X;
公共智力;
公共INTZ;
}
var dictionary=newdictionary();
var向量=新向量3();
对于(vector.X<100;vector.X++)
对于(vector.Y<200;vector.Y++)
对于(vector.Z<300;vector.Z++)
字典[向量]=“完成”;
对于(vector.X<100;vector.X++)
对于(vector.Y<200;vector.Y++)
对于(vector.Z<300;vector.Z++)
Console.Write(字典[vector]);

A
Dictionary
lookup的性能无法超过按索引进行的数组查找。这两种操作都是O(1)操作,
Dictionary
引入了与hashcode相关的开销,同时也占用了更大的内存。只有当你在一个巨大的3D数组中有稀疏数据时,你才能考虑使用<代码>字典<代码>。例如,如果每1000个单元中只有一个实际填充。在这种情况下,使用字典仍然会有更差的性能,但至少你的程序会消耗更少的内存。

你能发布真实的、可运行的代码吗?为什么问我们?您可以对这3个方面进行基准测试,并从中获得成就感和乐趣。还要注意的是,无论如何,您都应该对实际代码进行基准测试,作为经验法则,
Dictionary
有助于查找以减少对集合的扫描。不管你们如何浏览所有的例子,你们需要了解的字典都会比较慢。不要在你的代码中加入聪明的引号,它们是魔鬼。使用常规双引号。