访问字典和多维数组很慢

时间:2010-10-22 03:22:20

标签: c# dictionary multidimensional-array

我发现访问Dictionary和Multi-Dimension数组可能很慢 - 因为字典和数组的访问时间为O(1),所以很难解决。

这是我的代码

public struct StateSpace
{
public double q;
public double v;
public double a;
}

public class AccessTest
{
   public Dictionary<int, Dictionary<double,StateSpace>> ModeStateSpace;
   public double[,] eigenVectors;
   public void AccessJob(int n, double times)
  {
     var sumDisplacement = new double[6];
     for(int i=0; i< n; i++)
     {
       var modeDisplacement = ModeStateSpace[i][times].q;  //takes 5.81 sec
       for(int j=0; j<6; j++)
       {
                var eigenVector = eigenVectors[i, j];  //takes 5.69 sec
                sumDisplacement[i] += eigenVector*modeDisplacement ; //takes 1.06 sec        
       } 
     }
  } 



}

注意有趣的部分?操作需要约1秒,但字典和多维数组的访问需要约5秒!知道为什么会这样吗?

n在这里并不重要,每次操作所需时间的绝对大小也是如此。重要的是算术运算和字典查找时间之间的比率。

编辑:我正在使用Ants Profiler进行分析。

注意:我只是将我的实际代码简化为这样的东西;上面的代码片段尚未经过测试,但我相信我会通过上面的代码片段来捕捉问题的要点。

1 个答案:

答案 0 :(得分:1)

众所周知,锯齿状数组比.NET中的多维数组更快(至少在Windows上):