|
|
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
Вопрос к гурам нашего форума наверно :) Какой код считается более правильным и производительным? Например можно сделать так: 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") создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 12:45:16 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
Также код типа rng.item(1,1) либо rng(1,1) Есть ли какая-то разница между ними? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 12:47:06 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
nporaMep, а просто проверить? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 13:40:28 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
_slan_, по моим опытам второй способ быстрее: на 9999 вызовов дает 9.75с против 10.27с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 13:48:49 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
_slan_,а если использовать worksheets(1).. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 13:51:10 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
ну мне кажется интуитивно, что при использовании 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... задержка будет на каждой строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 14:41:52 |
|
||
|
Производительность и правильность кода.
|
|||
|---|---|---|---|
|
#18+
nporaMep, Все правильно. При каждом вызове Worksheets("Sheet2").Range(...) Эксель будет пробегать по списку листов, поэтому если надо обращаться к одному и тому-же листу несколько раз - эффективнее будет сделать переменную типа Worksheet и работать через нее. То же самое касается и вообще всех коллекций. nporaMep dim ws as worksheet set ws = worksheets("Sheet2") создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры?Да, освобождается. nporaMepТакже код типа rng.item(1,1) либо rng(1,1) Есть ли какая-то разница между ними?Есть конечно, но до тех пор пока ты пишешь на VBA ты ее не увидишь совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2008, 17:53:37 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=35728501&tid=2179965]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 285ms |

| 0 / 0 |
