|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
Всем здравствуйте. Столкнулся с интересной проблемой, которую не могу решить уже второй день. У меня есть программа, написанная достаточно давно. В последнее время пользователи начали жаловаться на то, что при достаточно продолжительной работе программа начинает сильно тормозит. Пользователям я особо не верил, пока сам не проверил - действительно происходит чтото непонятное. При работе программа все больше и больше откушивает оперативной памяти и в результате просто напросто виснет. После нескольких часов изысканий и тестов пришел к следующему: создал форму, кинул на него трудбгрид и 2 баттона. Ниже привожу оч простенький код формы: Код Visual Basic Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Ну вот как бы и совсем все просто. На первой кнопке заполняю грид данными из таблицы. Вторая кнопка имитирует пользователя, которые добавляет 100 записей в таблицу, при этом рекордсет, ну и как следствие грид обновляется, пользователь видит результат своих действий. При каждом нажатии на кнопку 2 эта простенькая формочка "внаглую отжирает" по 3 метра оперативы. Если вот этот код убрать Код: vbnet 1.
то все работает отлично. Но, как вы понимаете, бедный пользователь не видит результат своего труда. И вот тут я совсем теряюсь. Код элементарный, вродеб какбы все должно работать и не работает. Раньше подключения были на адошных объектах, без рекордсетов, все работало стабильно, но оч медленно, поэтому к этому варианту не хочется возвращаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 14:23 |
|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
roman.a, ну возвращайте TOP 1000 первых записей из таблицы, а не всю её ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 15:18 |
|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
Ну очищай память, после того как отработал курсор я его делаю Код: vbnet 1.
Вроде мелочь, но вошло в привычку, обнулять курсоры и переменные после их использования. Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 15:28 |
|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
в табличке и так записей совсем немного. Более того, если в таблице сделать 100-500 записей, ну и в событии второго баттона в цикле закомментировать операцию добавления, а просто делать rs1.Requery, то память кушается точно также. Т.е. возникает чувство, что при каждом rs1.Requery старые данные из датагрида не убиваются, а где-то остаются. Причем, если форму закрыть и снова открыть - то из оперативной памяти ничего не уходит, хотя везде написано, да и сам я наскок помню, в бэйсике как только ссылка на переменную(объект) убивается то и память освобождается. Оперативка очищается только если закрыть приложение полностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 15:32 |
|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
kiv-1980, безусловно, set rs = nothing - это тож привычка. Просто в примере не написал. Тем не менее эта строчка ничем не помогает, я её пробовал и внутри цикла ставить и применительно к датасурсу датагрида. Ну и это действие вообще должно наверно происходить на закрытии формы, иначе если рекордсет обнулить раньше времени - то обнулится и датагрид, разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 15:39 |
|
жадные datagrid+recordset
|
|||
---|---|---|---|
#18+
roman.akiv-1980, безусловно, set rs = nothing - это тож привычка. Просто в примере не написал. Тем не менее эта строчка ничем не помогает, я её пробовал и внутри цикла ставить и применительно к датасурсу датагрида. Ну и это действие вообще должно наверно происходить на закрытии формы, иначе если рекордсет обнулить раньше времени - то обнулится и датагрид, разве нет? не совсем правильно написал ). Безусловно эта строка помогает и я её ставлю всегда там где надо, например на закрытии формы. На каждый сет обязан быть свой сет=носинг. Но в данном случае (а случай то вроде стандартный) внутри цикла данная строка не дает никаких результатов. К тому же, как я уже писал, если датагриду не назначать в качестве датасурса рекордсет, то все работает очень даже хорошо, и память совершенно не растет, правда и пользователю в гриде ничего не видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2012, 15:44 |
|
|
start [/forum/topic.php?fid=60&fpage=68&tid=2157370]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 162ms |
0 / 0 |