|
|
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Или как сделать чтобы VB6 работал быстрее? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 08:16 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Если база в сети, а клиент где-то, то может из-за трафика. Посмотри, ты же читаешь запись за записью по одной, она туда-сюда, туда-сюда за тридевять земель. Но это только догадка, т.к. ты не показал нам путь к базе. Или все-таки код разнится. База сидит там же, где и клиент? И если ты делаешь для всех записей какое-то вычисление, то лучше это выпонить через SQL запрос, минуя цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 09:16 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
База локальна и в ней ~30 000 записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:05 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Окрыть соединение с клиентским курсором, а рекордсет adOpenStatic. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:12 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:22 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Два замечания для оптимизации этого: 1. Никогда не объявляйте рекордсет как Dim rs As New ADODB.Recodset Всегда так: Dim rs as ADODB.Recordset Set rs = new ADODB.Recodset Обращение к свойствам и методам рекордсета объявленного как As New - на три порядка медленниее. Это очень заметно в циклах по записям-полям. 2. Если надо вернуть эти записи обратно в БД, то лучше в запросе все манипуляции и сделать. Или возрващать записи не через рекордсет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:50 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
И еще: Иногда бывает нужен сложный алгоритм по числу записей более 1000. Есть смысл "перегнать" все это в массив (Type) и уже с ним работать. Массив пользовательского типа данных работает примерно в 300-500 раз быстрее рекордсета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:53 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Я так и делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:57 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Кстати, да. Я и не посмотрел Кому советы даю. Здесь два узких места: 1) Рекордсет, обращения к полям которого очччень медленные (относительно). Слишком много событий он генерит. 2) Процессное взаимодействие. Между БД и приложением VB будет столько межпроцессных вызовов сколько записей в рекордсете. Надо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 11:07 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Ну вот, опять одно по одному. Вы не то сравниваете. Access надо сравнивать например с FoxPro, даже с SQLями не годится его сравнивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:15 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
WorobjoffНадо все записи одним вызовом послать туда. Тогда будет сравнимо по скорости с Аксесс. Так как таблицу или запрос отправить, скажем, во многомерный массив, например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:33 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Люди дорые помогите! Не дайте отказаться от VB6 и перейти на Access. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:34 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Дотнет - панацея от всех бед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:42 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Что надо сделать над записями? Сколько записей надо обработать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:51 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Random_GoodmanДотнет - панацея от всех бед.Не во всяком дотнет. Блочная вставка таблиц появилась лишь в 2.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 12:56 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Есть Таблица1 - список деталей. ~30 000 записей Есть Таблица2 - список деталей которые надо удалить из Таблицы1 Удалить надо 20-30 кодов деталей из Таблицы1. Мой гениальный алгоритм: 1 . Читаю Таблица1 2. Ищу соответствующий код детали в Таблице2 3. Если нашёл, то запись из Таблицы1 отмечаю для удаления ( только отмечаю ) 4. Go to на метку 1 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:04 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
А почему нельзя выполнить запрос? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:07 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
или UPDATE Table1 SET IsDeleted = true WHERE ID in (SELECT ID FROM Table2 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:09 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Дело в том, что я должен анализировать! Сколько деталей я удалил из Таблицы 1 Сколько деталей я не нашёл в Таблице 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:16 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Было что-то подобное в моей работе. Оптимизировал так: - Рекордсет перегнал в массив Type. (ускорение анализа) - Возвращал результат в БД так: Код: plaintext Известно и то сколько запрошено на удаление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:26 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
А как перегнать RecordSet в массив? Примерчик бы! Благодарю за запросы (см. выше). Что называется навёл на мысль! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:34 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klen_А как перегнать RecordSet в массив? Примерчик бы!Dim Conn1 As Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:50 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Vorobjoff. Классно! Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:56 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klen_Дело в том, что я должен анализировать! Сколько деталей я удалил из Таблицы 1 Сколько деталей я не нашёл в Таблице 1 сколько деталей не нашел: select count(*) from Table2 t2 left outer join Table1 t1 on t2.id = t1.id where t1.id is null сколько удалишь: select count(*) from Table2 t2 inner join Table1 t1 on t2.id = t1.id ну и удаляешь этим же джоином это если таблицы в акцессе, а если на сиквеле, там процедурой вообще крысота будет тока в транзакцию это все удовольствие нужно поместить, а то сосчитаешь, а тут тебе записей навставляют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 14:10 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 15:48 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klen_А как перегнать RecordSet в массив? Примерчик бы! Благодарю за запросы (см. выше). Что называется навёл на мысль! Да нафига в массив-то? Разницы с сканировании не ощутишь. Тот же Access ведь с табличкой не через ODBC работает, так что просто поменяй провайдера с ODBC на OLEDB. Ну как в примере от Worobjoff. Плюс к тому статический курсор и можно еще BatchOptimistic. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 09:31 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
AndrF[quot klen_]просто поменяй провайдера с ODBC на OLEDB. Ну как в примере от Worobjoff. Действительно стало работать быстрее. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 09:57 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Access всё равно читает таблицу в миг. Буквально пару секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 10:01 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Access не читает всю таблицу сразу, он зачитывает первые N записей - те, которые помещаются на экран. Да и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 10:05 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klen_ Access всё равно читает таблицу в миг. Буквально пару секунд. Что понимаешь читает? Выводит на экран? Ну и в программе на VB можно точно так-же ее вывести. И вообще - скорость не должна зависеть от того на чем пишешь - на Access, VB или C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 13:51 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
MelkiadesAccess не читает всю таблицу сразу, он зачитывает первые N записей - те, которые помещаются на экран. Обыкновенный серверный курсор... MelkiadesДа и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально. Да никакой разницы, вообще-то... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 13:52 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
AndrF MelkiadesДа и в любом случае обмен данными между интерфейсами занимает времени больше, нежели при использовании только одной Access, это нормально. Да никакой разницы, вообще-то... ;) Что значит никакой? Access что, работает с базой mdb через ODBC или через OLEDB? Я, конечно, не спец по Access, но имхо он работает с базой через собственное API, а не через этих провайдеров. Вот вам и разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 14:23 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 15:18 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
Все дело в межпроцессном взаимодействии. Если после каждого MoveVext приложение обращается к БД, тормозить будет. А если зафетчить все записи сразу, обращение будет лишь одно. Каждый раз, при обращении к другому процессу (в д.случае к МДБ) теряется время впустую. Приложение-клиент тупо ждет когда ОС "вспомнит" о его запросе и передаст его приложению-серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 16:17 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klenSet db = CurrentDb() Метод косвенно указывает на то, что в коде Акса используется ДАО, а не АДО, а ДАО быстрее АДО само по себе (правда, вряд ли в столько раз, скорее на NN процентов), и как раз предназначено для работы с ДЖЕТ машиной максимально шустро. Зы-1: Это в дополнение к другим возможным объяснениям. Зы-2: Скорее трабла в долгом коннекте АДО к источнику, поскольку оно вот такое интеллектуальное. А КуррентДБ с рекордсетом ДАО фетчит сразу весь набор в память, да ещё в той же рабочей области, что и текущий коннект ДЖЕТА. Зы-3: Замерьте не весь кусок кода, а только циклы, исключив собственно коннект АДО из замера. Думаю, не будет такой разницы в разы. Там и "собака порылась"... :-) ИМХО, однако. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 17:19 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
WorobjoffВсе дело в межпроцессном взаимодействии. Если после каждого MoveVext приложение обращается к БД, тормозить будет. А если зафетчить все записи сразу, обращение будет лишь одно. Вообще-то при клиентском курсоре все данные сразу тащатся на клиентскую машину. Оттого и его название ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 03:04 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
klen_текст на VB6 ЧИТАЕТ ЗА 12 СЕКУНД ~30 000 ЗАПИСЕЙ текст на Access-е ЧИТАЕТ ЗА ПАРУ СЕКУНД ~30 000 ЗАПИСЕЙ Вы прям волшебники какие-то... Ниже приведены результаты исходники и результаты теста на VB6. Видно что резко отличается лишь время заполнения таблицы. А примитивное сканирование 30000 записей в любом случае выполняется менее чем за секунду. Откуда взяли пару (а тем более 12! ) секунд??? Это ж какой талант надо иметь ;) автор--- Columns = 15, Rows = 30000 ADODB: ADODB_FillTable 37,656 ADODB: ScanTable (Client Cursor) 0,530 ADODB: ScanTable (Server Cursor) 0,312 DAO: DAO_FillTable 2,406 DAO: ScanTable (Snapshot Cursor) 0,438 DAO: ScanTable (Dynaset Cursor) 0,141 Исходник тестового модуля: Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 04:37 |
|
||
|
Почему VB6 такой тормозной. Access и тот быстрее обрабатывает таблицы и запросы.
|
|||
|---|---|---|---|
|
#18+
MelkiadesЧто значит никакой? Access что, работает с базой mdb через ODBC или через OLEDB? Я, конечно, не спец по Access, но имхо он работает с базой через собственное API, а не через этих провайдеров. Вот вам и разница. Access вообще-то работает с базой через провайдер, который ему укажут. Это был бы маразм для него собственное API работы с данными изобретать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2006, 04:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2164880]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 560ms |

| 0 / 0 |
