Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Производительность и правильность кода. / 7 сообщений из 7, страница 1 из 1
22.12.2008, 12:45:16
    #35727542
nporaMep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
Вопрос к гурам нашего форума наверно :)

Какой код считается более правильным и производительным?
Например можно сделать так:
Worksheets("Sheet2").Range("A2").value = 1

либо:
dim ws as worksheet
set ws = worksheets("Sheet2")
dim rng as range
set rng = ws.range("A2")
rng.value = 1

Второй способ удобен тем, что работает intellisense или как он называется в VBA. Первый короче, но зачастую в длинном коде оказывается длиннее.
Насчет производительности мне интересно правильно ли я понимаю что
dim ws as worksheet
set ws = worksheets("Sheet2")
создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры?
...
Рейтинг: 0 / 0
22.12.2008, 12:47:06
    #35727546
nporaMep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
Также код типа
rng.item(1,1)
либо
rng(1,1)

Есть ли какая-то разница между ними?
...
Рейтинг: 0 / 0
22.12.2008, 13:40:28
    #35727712
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
nporaMep, а просто проверить? :)
...
Рейтинг: 0 / 0
22.12.2008, 13:48:49
    #35727750
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
_slan_, по моим опытам второй способ быстрее:
на 9999 вызовов дает 9.75с против 10.27с
...
Рейтинг: 0 / 0
22.12.2008, 13:51:10
    #35727764
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
_slan_,а если использовать worksheets(1)..
...
Рейтинг: 0 / 0
22.12.2008, 14:41:52
    #35727975
nporaMep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
ну мне кажется интуитивно, что при использовании
set ws = Worksheets("Sheet2")/set ws = Worksheets(2)

ws.range...
ws.range...
ws.range...
ws.range...
ws.range...

Задержка будет только в 1-й строке.

Если использовать
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...

задержка будет на каждой строке.
...
Рейтинг: 0 / 0
22.12.2008, 17:53:37
    #35728501
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Производительность и правильность кода.
nporaMep,

Все правильно.
При каждом вызове Worksheets("Sheet2").Range(...) Эксель будет пробегать по списку листов, поэтому если надо обращаться к одному и тому-же листу несколько раз - эффективнее будет сделать переменную типа Worksheet и работать через нее. То же самое касается и вообще всех коллекций.

nporaMep
dim ws as worksheet
set ws = worksheets("Sheet2")
создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры?Да, освобождается.

nporaMepТакже код типа
rng.item(1,1)
либо
rng(1,1)

Есть ли какая-то разница между ними?Есть конечно, но до тех пор пока ты пишешь на VBA ты ее не увидишь совсем.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Производительность и правильность кода. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]