Эффективное вычисление массива 15x10 - PullRequest
0 голосов
/ 30 ноября 2009

Теперь у меня есть одна проблема для разработки приложения для iPhone. Мне нужно вычислить 150 частей и нарисовать их на холсте. У меня есть такой код:

    for (int i=x1; i<=x2; i++) {
            for (int j=y1; j<=y2; j++) {
                    x=[NSNumber numberWithInt:i];
                    y=[NSNumber numberWithInt:j];

                    BoxCache *box = [[cache objectForKey:x] objectForKey:y];

                    if (box) {
                            ret.count += [box.species count];
                    }

                    [x release];
                    [y release];
            }
    }

Его исполнение утомило ~ 5 секунд (вычислительный массив 15x10), я хотел бы спросить всех, есть ли у кого-нибудь идеи по сокращению времени вычислений или тому подобное.

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Вместо словаря словарей (который на самом деле неэффективен), я бы использовал обычный старый массив C и самостоятельно распределил память. Я мог бы обернуть его в класс, чтобы сделать правила управления памятью более понятными, но это все.

1 голос
/ 30 ноября 2009

Возможно, вам потребуется больше информации, поскольку ваш вопрос довольно расплывчатый. Однако на основании того, что вы написали, у меня есть два комментария:

Во-первых, вопрос, который вы задали. Почему бы не использовать массивы и целые числа C, а не (как представляется) словари? Это намного быстрее.

Во-вторых, вы создаете автоматически выпущенные экземпляры NSNumber (+ numberWithInt: дает вам автоматически выпущенный номер), а затем перевыпускаете их своими вызовами -release.

Вещи, которые требуют уточнения для лучшего, более конкретного ответа:

  1. Что такое BoxCache и как он работает?
  2. Где вычисления, которые вы упомянули в первом абзаце?
  3. Что такое "кеш", откуда он берется и как он работает?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...