Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SqlDatasource и тормоза на странице
|
|||
|---|---|---|---|
|
#18+
Добрый день уважаемые форумчане! Есть небольшой проект на ASP.Net: на странице планировщик (DevExpress) который берет данные из Firebird БД (.fdb) ~6000 записей. Когда было несколько сотен записей все работало удовлетворительно, когда их стало несколько тысяч пошли тормоза. Планировщик загружает данные через SQlDatasource, причем SelectCommand и FilterExpression устанавливаются динамически в Page_Init (для каждой роли пользователя свои запросы + фильтры заданий планировщика на странице). Тормоза происходят при смене дней или ресурсов на планировщике, т.е. когда планировщик посылает колбэк и каждый раз (как я понимаю) происходит загрузка данных. Я так понял, что SqlDatasource перезагружает данные при любом постбэк/колбэк !? Нужно уходить от SqlDatasource? Использовать кэширование? Посоветуйте в каком направлении копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 15:25 |
|
||
|
SqlDatasource и тормоза на странице
|
|||
|---|---|---|---|
|
#18+
leon777Добрый день уважаемые форумчане! Есть небольшой проект на ASP.Net: на странице планировщик (DevExpress) который берет данные из Firebird БД (.fdb) ~6000 записей. Когда было несколько сотен записей все работало удовлетворительно, когда их стало несколько тысяч пошли тормоза. Планировщик загружает данные через SQlDatasource, причем SelectCommand и FilterExpression устанавливаются динамически в Page_Init (для каждой роли пользователя свои запросы + фильтры заданий планировщика на странице). Тормоза происходят при смене дней или ресурсов на планировщике, т.е. когда планировщик посылает колбэк и каждый раз (как я понимаю) происходит загрузка данных. Я так понял, что SqlDatasource перезагружает данные при любом постбэк/колбэк !? Нужно уходить от SqlDatasource? Использовать кэширование? Посоветуйте в каком направлении копать? а как же. грузит еще как. только не SQLDatasource а DevExpress. особенно если в Page_Load вы Page.IsPostBack не разделяете. направление такое: 1. убрать devexpress (это просто). 2. настроить devexpress - чтобы он на каждый клик не грузил всю выборку заново. (это сложно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 16:06 |
|
||
|
SqlDatasource и тормоза на странице
|
|||
|---|---|---|---|
|
#18+
monstrUleon777Добрый день уважаемые форумчане! Есть небольшой проект на ASP.Net: на странице планировщик (DevExpress) который берет данные из Firebird БД (.fdb) ~6000 записей. Когда было несколько сотен записей все работало удовлетворительно, когда их стало несколько тысяч пошли тормоза. Планировщик загружает данные через SQlDatasource, причем SelectCommand и FilterExpression устанавливаются динамически в Page_Init (для каждой роли пользователя свои запросы + фильтры заданий планировщика на странице). Тормоза происходят при смене дней или ресурсов на планировщике, т.е. когда планировщик посылает колбэк и каждый раз (как я понимаю) происходит загрузка данных. Я так понял, что SqlDatasource перезагружает данные при любом постбэк/колбэк !? Нужно уходить от SqlDatasource? Использовать кэширование? Посоветуйте в каком направлении копать? а как же. грузит еще как. только не SQLDatasource а DevExpress. особенно если в Page_Load вы Page.IsPostBack не разделяете. направление такое: 1. убрать devexpress (это просто). 2. настроить devexpress - чтобы он на каждый клик не грузил всю выборку заново. (это сложно) шайтан используэт SQLDataSource и не используэт кэшироване 2.а настрой кешированее 2.б создай свой прослойка бизнес уровень -- ObjectDataSource для тебя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 15:37 |
|
||
|
SqlDatasource и тормоза на странице
|
|||
|---|---|---|---|
|
#18+
Ребята спасибо за ответы! Тоже копаю, что нарою отпишусь. От Dev пока отказаться проблематично - слишком много логики завязано на их довольно богатом функционале ( в т.ч. развитом клиентском АПИ)! Пока рою в сторону: 1) кэширование (для не очень больших справочных таблиц, которые не меняются это вообще по-моему маст ду :-) 2) своя прослойка, как было предложено ObjectDataSource 3) Настройка Dev Scheduler таким образом, чтобы в SqlDataSource/ObjectDataSource запрашивались не все данные, а только те, что нужны для отображения на текущей странице планировщика (для указанных ресурсов и дат). По-моему там есть что-то типа пользовательского биндинга через события... 4) Оптимизация запросов Еще вопрос попутно: кэш который использует SqlDataSource можно обновлять самому вручную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 16:09 |
|
||
|
SqlDatasource и тормоза на странице
|
|||
|---|---|---|---|
|
#18+
Помимо всего сказанного есть несколько стандартных решений от самих DevExpress для работы с большими объемами данных. 1) Для планировщика ASPxScheduler. Вместо полной загрузки данных используется событие FetchAppointments планировщика. В него передается интервал, запрашиваемый планировщиком в текущий момент и мы должны запросить данные из БД именно за этот интервал. Но есть нюанс при работе с NavigationButtons планировщика (кнопочки для навигации к ближайшему заданию для ресурса) и DateNavigator (календарик, где отмечены черным даты для которых есть задания). Т.к. мы запрашиваем только часть данных мы можем не знать о каких-либо заданиях находящихся за пределами указанного интервала, поэтому разработчики предлагают добавлять смещение интервалов (padding) варьируя между детализацией и производительностью. Код: 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. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 2) Для комбобокса ASPxCombobox. Вместо полной загрузки данных используются два события: запрос одной записи по ID (когда нужно отобразить поле Text комбобокса по его Value) и для фильтрации по условию.События OnItemRequestedByValue и OnItemsRequestedByFilterCondition соответственно. В примере БД Firebird 1.5. Первое событие (запрос по ID) там все просто. Во втором случае BeginIndex/EndIndex нужны для постраничного отображения результатов фильтрации. Когда я просто открываю комбо (не вводя условие фильтра), то передается пустая строка '' и должны отобразиться первые 10 записей подряд (размер страницы 10). Но в данном примере, когда в select передается '', то ничего не возвращается, притом, что если прописать '' в самом запросе работает как надо. Я не стал возиться и нашел обходной путь Т.к. в моем составном поле FULL_NAME по которому фильтруется всегда есть пробелы заменяю '' на ' ' и получаю нужный результат. Может кто увидит в чем прикол/другое решение то напишите... Код: 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. Код: c# 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 14:03 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38857651&tid=1356747]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 342ms |

| 0 / 0 |
