|
|
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Задачка следующая. Сейчас открываю рекордсет rs с 1000 записей и тремя полями. Затем в цикле перебираю все записи: Код: plaintext 1. 2. 3. 4. 5. 6. Т.к. этот цикл запускается в другом цикле (rs открыт постоянно: перед запуском вложенного цикла делаю rs.MoveFirst), на большом количестве записей в rs прога начинает подтормаживать. Вопрос. А если заменить rs трехмерным массивом, будет ли хотя бы какое-то ускорение работы? Работаю в A97. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:14 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
мама миа... А запросом не проще ли?? Для чего в данном случае используется ф-ия InStr? Т.е. куды попадаит возвращаемое ей значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:18 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Ускорение будет, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:19 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
А в массив вы как будете данные закачивать? Через rs? И где тут ускорение? Я так понял, что у вас 3 цикла (по каждому из полей)? Итого 1000^3 Массив у Вас тоже в даун уйдет при миллиарде итераций - надо что-то в алгоритме менять - или смириться И массив вам судя по всему не 3-х мерный нужен, а 3 одномерных? Если да - то массивы быстрее должны работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:22 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
теперь я вообще ничего не понимаю. Как можно Рекордсет (столбцы, строки) заменить ТРЕХмерным массивом (кубиком) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:22 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz автортеперь я вообще ничего не понимаю. Как можно Рекордсет (столбцы, строки) заменить ТРЕХмерным массивом (кубиком) ??? Насколько я понимаю - примерно так :) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:25 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 paparome: Ускорение будет за счет того, что сейчас проход по рекордсету делается внутри цикла, а для загрузки достаточно однократного прохода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:27 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
у рекордсета есть GetRows, возвращает ДВУМЕРНЫЙ массив. В среднем это будет быстрее, но сильно зависит от типа рекордсета. Кажется, самый быстрый вариант будет, если рекордсет ФорвардОнли. Есть еще детали в зависимости от того, чей он - DAO или ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:28 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 paparome: Ну и хде тута трехмерность? Типа, третья ос? Не-е-е... И вообще, чем обсуждать, что быстрее - массив или рекордсет, надо попросить человека привести полный код. Чует мое сердце, его задача решается двумя UPDATE и одним SELECT :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:28 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
замечание при 3000 сравнений есть смысл подумать о замене Instr на InStrB, тем больший, чем длиннее сравниваемые пары. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:32 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Саныч Я ж не против :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:33 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч А есть ли опыт? Меня интересует стоит ли овчинка выделки. Хотя бы ориентировочная экономия времени, при прочих равных условиях. 2 zz Запросом нельзя. Я просто упростил выражение в скобках InStr(). Трех мерный массив это не куб. Имел ввиду массив вида Arr(1000,2), где 2 и дает "три измерения" (или 2 строки), куда можно затолкать весь rs. 2 paparome Цикла 2, как написал: во внешнем цикле rs и результаты InStr никак не используются. rs открывается ОДИН раз при запуске базы. Если его данными заполню массив, то это время мне не критично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:41 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Alex: Ну все-таки, если не трудно, приведи кусок кода, где ты работаешь с рекордсетом. Может, и действительно нельзя запросом. Но я скотина недоверчивая, хочу сам проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:44 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
авторТрех мерный массив это не куб. Трехмерный массив - это куб (с фактами не поспоришь :)) А у Вас двухмерный массив, точнее - даже два одномерных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:47 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Victosha Я тоже думал о такой замене. A что InStrB быстрее InStr? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:48 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz Вот небольшой кусочек. Хочу выжать из VBA максимум возможного. Повторяю, это Access 97, т.е. DAO.rs. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:55 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
возможно отсоединенный рекрсет будет работать сравнимо со скоростью массива. (а может быстрее??) если не сложно сравни и сообщи результаты самому интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 16:58 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Какова примерная длина строки G? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:12 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz 100 - 255 символов. В 90% ~ 200 символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:16 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
еще 2 вопроса. Какова примерная длина rstx("Name") и как максимально/в среднем часто может встечаться rstx("Name") в G? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:24 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz Длина rsx("Name") ~ 2 - 20 символов. В 90% ~ 3 - 10 символов. Число вождений одного значения rsx("Name") в G ~ 0 - 6. Число вождений всех значении rsx("Name") в одну строку G ~ 0 - 10. В 90% ~ 1 - 3. В приведенном куске кода, W = Len(G). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:31 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Ладно, всем пока. Пошел я домой. На выходных поломаю голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:32 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
zz , на тебя вся надежда ;-). Счастливо отдохнуть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:37 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
щас сильно в мыле а InStrB заметно быстрее InStr, если память не изменяет, %15-20 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:38 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Все-таки я ее решил. Алекс, проверь. Итак два запроса. 1-ый запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. зовется он strBase. 2-ой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Как видно, все основано на том, что поле "Name" не будет входить более 6 раз в строку G. Alex, за тобой тестирование :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:46 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Victosha Это уже кое-что! Так понял, если буду пользовать InStrB, то и длины должен буду считать через LenB? W = LenB(G) Y = N + LenB(rsx("Name")) Раньше InStrB не использовал ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:46 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Alexus112 Ты еще жив? Это что за зверь? Do While Y < W что тут пытается происходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:48 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
Народ, протестите плиз запросы мои на 1-ой странице... А то уже домой бежать надо, хочется результат узнать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:50 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz Спасибо, попробую в понедельник. Но что-то сомнения у меня насчет увеличения скорости ... Мне ж еще все координаты найденных надо в массив A8() затолкнуть ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:52 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Алекс: опять же: а зачем эти координаты тебе в массиве? Какова конечная цель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:53 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Victosha Это проверка просмотрена ли вся строка G: Y - это позиция в G с которой смотрим W - это длина G Т.е. есть при невыполнении это условия строку просмотрели и выходим из цикла. Я тоже пошел. Всем до понедельника! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 17:56 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz Нужны они мне :) как шпиону секретная информация: Массив A8() использую далее в аналогичном цикле по той же строке G, но ищется в ней другой набор вхождений. А потом сравниваются найденные координаты, с координатами из A8(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 18:00 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Alexus112 вот попробуй для начала, и скажи быстрее или нет исходного варианта Код: 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. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 18:26 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
что - то автора не видно - спит, наверно. корявенько у мене получилось сходу, циклик лучшее так переписать: Код: 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. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2004, 03:20 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
в предыдущем посте опять опШиПка - в N = InStrB(Y, G, rsx("Name")) вместо rsx("Name") д.б. sName (((ж Если ОЧЕНЬ хочется позаморачиваться с масивами, то вариант0 мог бы выглядеть приблизительно так (реальное быстродействие зависит в первую очередь от типа рекордсета. Собственно обработку массива можно поулучшать, но сейчас не могу вывалить реально хорошего варианта под акцесс) : Код: 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2004, 03:52 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Alex: Опять же, почему это нельзя сделать запросом? А насчет "сравнить" - так это однозначно лучше запросом делать, чем циклом по массиву! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 10:23 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz не знаю почему, но как-то неочевидны для меня Ваши утверждения про однозначность. Мы с Вами, сударь, в этом месте составляем бабушку на двоих. Вот пусть Alex112 и проверит -)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 10:49 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 Victosha: Не, может, я ошибаюсь, конечно, черт его знает... Привык просто уходить везде, где можно, от циклов по рекордсетам. Не нравятся они мне. Вызывают, тасказать, унутреннее отторжение :)) Не спорю, возможно, в данном случае действительно лучше циклом. Но почему бы не предложить альтернативный вариант? (а заодно и свои силы проверить - получится или нет). Кстати, задача Алекса имеет еще одно решение, не зависящие от кол-ва вхождений поля Name в строку G, как мой первый вариант. 1. Строка G разбивается через Mid на все возможные куски и пишутся эти куски в таблицу с указанием начала/конца вхождения. Время в случае Len(G)=220 3 сек. 2. INNER JOIN нашего рекордсета с полученной таблицей по текстовому полю даст нужный итог. Время в случае Count(*)=10000 ок. 1 секунды. Итого 4 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 10:58 |
|
||
|
Что быстрее: перебор строк рекордсета или элементов массива?
|
|||
|---|---|---|---|
|
#18+
2 zz OK красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 11:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1674595]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 503ms |

| 0 / 0 |
