Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
> Автор: Shamanus > у меня был вариант с сортировкой... но супротив варианта за 3 сек не попрет :) Дык три секунды это на тестовых данных от автора топика, там тех данных, кот наплакал :) С сортировкой тоже идея, можно отсортировать и тогда сужать диапазон поиска. Я задал всегда искать по столбцу А, а можно указать диапазон и постоянно его именьшать, что тоже может привести к ускорениям, но нужно замерять на больших объемах, потому что сама сортировка может "съесть" весь выиграш от ускорения поиска по упорядоченным данным. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:43 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Я там чуть с диапазоном не дотянул, ещё 2 столбца добавить надо... Sheets(1).Cells(f.Row, 22)).Copy Sheets(2).Cells(i, 3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:47 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Спасибо всем большое!!!! Буду набираться ума из вышеуказанных кодов. Пока что испытал код Hugo121 (за 30 секунд обработал 345 записей) и код VSVLAD (за 30с - 938 записей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:41 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
> Автор: snap2111 > Буду набираться ума из вышеуказанных кодов. > Пока что ... (за 30 секунд обработал 345 записей) и ... (за 30с - 938 записей). Научи лучше запускать код, что-бы он выполнялся ровно 30 секунд Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:46 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, ))))))))))))) Перед глазами часы с секундной стрелкой, а руки на ктрл+брейк - енд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:52 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Ускорил в 2 раза почти, быстрее не получается... Не получается часть массива на лист выгрузить одним махом, приходится во временный перекладывать... Вот как бы сделать вроде Range(Sheets(2).Cells(i + 1, 3), Sheets(2).Cells(i + 1, 23)) = b(f.Row - 2) Пока такая версия: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:15 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > приходится во временный перекладывать... А ты попробуй не поэлементно перекладывать, а Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) сразу строку перебрасывать в новый массив и его присваивать :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:25 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Не, строку я в первой версии уже копировал, думаю так быстрее не будет. Я хотел сперва сразу все данные загнать в два массива, за два хода (это есть), затем сравниваем массивы, и при совпадении выгружаем часть массива на лист, в один приём. Вот это не получается, только перекладыванием во временный. Ещё можно попытаться сформировать итоговый массив, и затем его сразу вывалить... Так наверное тоже должно быть быстро. Хотелось бы VSVLAD догнать, с RangeData, в которых я с трудом пробираюсь... сильно путанно. Но 1 сек. на моей машине впечятляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:46 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Ну что мог, сделал, меньше 3-х секунд. Зато всё прозрачно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:58 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
> Автор: Hugo121 > Игорь Горбонос, > Не, строку я в первой версии уже копировал, думаю так быстрее не будет. Я предлагал не строку копировать, а брать из памяти часть массива и копировать содержимое в другую часть памяти(другого массива) Но это не подойдет, т.к. массив хранится постолбцово, а не построчно > Ещё можно попытаться сформировать итоговый массив, и затем его сразу вывалить... Так наверное тоже должно быть > быстро. Согласен > Хотелось бы VSVLAD догнать, с RangeData, в которых я с трудом пробираюсь... сильно путанно. Но 1 сек. на моей > машине впечятляет. :) Там ничего сложного нет, Влад объявляет пользовательский тип данных, который содержит идентификатор, по которому будет поиск и Range всего диапазона в строке, которую нужно будет переносить на другой лист, это один цикл. Во втором цикле идет по всем ID'шникам другого листа и при нахождении совпадения не идет на лист за всей строкой, как мы с тобой, а "вытаскивает её из-за щеки" - из RangeData и делает простое присвоение :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:01 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Что-то опять чуть спутал (кодом выше тоже косяк есть) - в конце пишем в диапазон Range(Sheets(2).Cells(2, 3), Sheets(2).Cells(iLastrow, 23)) = c было Range(Sheets(2).Cells(2, 3), Sheets(2).Cells(iLastrowSvod, 23)) = c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:07 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Занесу в особоважныепримеры :), наверняка пригодится. А код от ТС у меня так до конца и не дорабоал, надоело ждать. Я даже статусбар подключил, чтоб видеть, что делается - уууу.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:17 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Код ещё можно ушустрить, надо отказаться от типа Variant. Тогда можно ещё чуть чуть выжать =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 20:04 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
VSVLAD, ушустрил - отказался от Find! Время - 0,015625 Я сам офигел © Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 20:26 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
f As Range уже не надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 20:29 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Чуть промахнулся, на 1 позицию. В части поиска так надо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 20:40 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Забыл - тут ещё чуть подогнать можно, на большом объёме может секунду-другую даст: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 21:02 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Ещё поправочка, одну строку есть смысл заменить: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:08 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Поторопился, вечно на этом спотыкаюсь... Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:14 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
Ещё вызов функции UBound() заменить на значение переменной, таким образом: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:42 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
VSVLAD, точно. Сделал, но на этом примере не чувствуется, похоже это минимум, что показывает таймер - 0,015625 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:30 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
У системного таймера в Windows это минимум 15мс. Поэтому замер даст или 0 или 15. Думаю что код уже оптимизирован дальше некуда... Нужно на реальных данных тестировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:11 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
У системного таймера в Windows это минимум 15мс. Поэтому замер даст или 0 или 15. Думаю что код уже оптимизирован дальше некуда... Нужно на реальных данных тестировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:12 |
|
||
|
Как оптимизировать данный код? Копирование данных
|
|||
|---|---|---|---|
|
#18+
После вставки этого кода tm = Timer - tm MsgBox tm показывает 42990,31 на моих тысячах записей (при выполнении кода VSVLAD) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36741947&tid=2159573]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 354ms |

| 0 / 0 |
