Какой индекс изменяется быстрее всего в массиве VB? - PullRequest
1 голос
/ 16 сентября 2010

При использовании двумерного массива Visual Basic какой индекс изменяется быстрее всего?Другими словами, при заполнении массива я должен писать ...

For i = 1 To 30
    For j = 1 To 30
        myarray (i,j) = something
    Next
Next

или

For i = 1 To 30
    For j = 1 To 30
        myarray (j, i) = something
    Next
Next

(или, наоборот, это очень сильно влияет)?

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

Основная колонка .VB6 использует COM SAFEARRAY , а размещает их в главном порядке столбцов .Самый быстрый доступ подобен этому (хотя это не имеет значения, если у вас есть только 30x30 элементов).

For i = 1 To 30 
    For j = 1 To 30 
        myarray (j, i) = something 
    Next 
Next 

Если вы действительно хотите ускорить обработку массива, примите во внимание советыв Advanced Visual Basic от Matt Curland , который показывает вам, как разбираться в базовых структурах SAFEARRAY.

Например, доступ к 2D SAFEARRAY значительно медленнее, чем к 1D SAFEARRAY, поэтому, чтобы установить для всех элементов массива одно и то же значение, быстрее обойти дескриптор SAFEARRAY в VB6 и временно создать собственный.Страница 33.

Также следует рассмотреть возможность включения « Удалить проверки границ массива » в параметрах компиляции свойств проекта.

1 голос
/ 16 сентября 2010

Я не знаю, указано ли (или где) это. Может быть оставлено как «определенная реализация».

Но я бы ожидал, что первым индексом будет «нижнее» измерение, то есть большие порции, а следующие позиции индекса будут более детализированными.

Редактировать: Кажется, я был не прав. VB6 использует подход «Столбец-первый».

Имеет ли это большое значение?

Вы должны измерить, но использование более высокого измерения для внешнего цикла позволит компилятору генерировать более быстрый код и сможет лучше использовать кэш процессора (локальность). Но с размером = 30 я бы не ожидал большой разницы.

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