Доступ к 2d массиву с точкой в ​​wpf C # - PullRequest
1 голос
/ 26 октября 2010

У меня есть 2d массив класса.Размер массива очень большой (около 3000 * 3000), и доступ к массиву обычным методом строк и столбцов занимает очень много времени.Для этой цели я хочу использовать указатели для доступа к массиву.

Ниже приведен код моего массива:

Определение класса:

Class BoxData     
{
  Size _bound;
  bool _isFilled=false;
  Color _color=Colors.White;

  public Size Bounds
  {
    get
    {
      return _bound;
    }
    set
    {
      _bound=value;
    }
  }

  public bool IsFilled
  {
    get
    {
      return _isFilled;
    }
    set
    {
      _isFilled=value;
    }
  }

  public Color FillColor
  {
    get
    {
      return _color;
    }
    set
    {
      _color=value;
    }
  }
}

Класс, используемый как массив в приложении:

BoxData[,] boxData=new BoxData[3000,3000];

Я хочу получить доступ к boxData с указателями.

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Может быть, вы могли бы использовать структуру вместо класса для BoxData?

Структура - это тип значения: когда вы объявляете свой массив, все уже будет заполнено.Вы больше не будете использовать цикл для создания new BoxData() экземпляров.

var x = new BoxData[3000,3000]; // Populated array of BoxData

Из-за ограничений struct vs class вам придется удалить инициализаторы следующим образом ...

struct BoxData
{
    Size _bound;
    bool _isFilled; // = false;
    Color _color; // = Color.White;

    public Size Bounds
    {
        get
        {
            return _bound;
        }
        set
        {
            _bound = value;
        }
    }

    public bool IsFilled
    {
        get
        {
            return _isFilled;
        }
        set
        {
            _isFilled = value;
        }
    }

    public Color FillColor
    {
        get
        {
            return _color;
        }
        set
        {
            _color = value;
        }
    }
}

... и инициализация значений по умолчанию с помощью цикла будет намного быстрее.

for (int j = 0; j < 3000; j++)
    for (int i = 0; i < 3000; i++)
        x[i, j].FillColor = Color.White;
2 голосов
/ 26 октября 2010

Попробуйте многоточечный массив вместо многомерного, они быстрее в реализации Microsoft CLR

BoxData[][] boxData=new BoxData[3000][];
for (int i=0; i<3000; i++)
    boxData[i] = new BoxData[3000];     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...