Медленный доступ к словарю и многомерному массиву - PullRequest
1 голос
/ 22 октября 2010

Я обнаружил, что доступ к словарю и многомерному массиву может быть медленным - довольно сложная задача, поскольку время доступа к словарю и массиву 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 Ответ

1 голос
/ 22 октября 2010

Известно, что зубчатые массивы быстрее, чем многомерные массивы в .NET (по крайней мере, в Windows):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...