|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
Добрый день! Моя задача : Сделать быструю загрузку и отображение данных в DataGridView. И не важно в выборке 100 записей или 1 млн! - программа в любом случае должна быстро отобразить данные. Данные хранятся локально в БД SQLite (db-файл рядом с exe). Предполагаемое решение : запросить TOP 100 записей (точнее LIMIT 0,99 в SQLite) видимые на экране, отобразить в гриде, а далее запустить фоновый поток, который будет догружать порциями остальные данные в грид, скажем, по 10 тыс записей. Сразу 1 млн записей по времени загружаются в грид у меня за 10 сек. При фоновой дозагрузке это время должно остаться примерно таким же (10 сек) или чуть больше, но важно, чтобы дозагрузка не мешала работе с программой (не блокировала интерфейс). В целом мой код работает, но есть проблема. Код: 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. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
Так вот проблема в том, что если RequeryGridContinue запускает 2-й поток (Thread2), то da.Fill в нем работает очень медленно (примерно 100 записей в секунду), но если эта же RequeryGridContinue была вызвана по тестовой кнопке на форме (из button1_Click), то 10000 записей добавятся в грид всего за 2-3 секунды , хотя и блокируя интерфейс. Почему фоновая дозагрузка в потоке настолько медленно работает и как ее ускорить? Также буду счастлив услышать критику данного решения вцелом и другие варианты решения задачи. Заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 04:43 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
AlexV1, Я думаю в принципе не верно говорить о загрузке в DataGridView 1 млн. записей! Кому они там нужны? Кто будет глазками их там просматривать? Лучше подумайте над фильтрацией и / или обработкой данных, что бы ползателю выдавать уже результат обработки без визуальной "лапши". ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 08:17 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
AlexV1, Создай вторую таблицу и загрузи туда данные полностью а потом поменяю DataSource. О результатах сообщи. ПС. Общая идея не понятна - кому и зачем так оно надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:40 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
Barkan, Да, вы правы. Визуально врядли юзеру нужно показывать 1 млн записей. И все таки, чисто интересно сделать асинх.дозагрузку с DataGridView, пусть даже данное решение практического применения не будет иметь ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 09:41 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
Для работы с гуи рекомендую BackgroundWorker ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:48 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
AlexV1Barkan, Да, вы правы. Визуально врядли юзеру нужно показывать 1 млн записей. И все таки, чисто интересно сделать асинх.дозагрузку с DataGridView, пусть даже данное решение практического применения не будет иметь сделайте дозагрузку на событие скрула, когда пользователь начинает прокрутку в гриде, догружайте по 100 записей. Зачем в памяти хранить 1кк записей. на 99.99% никто их смотреть не станет, а память засрете ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:50 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
AlexV1Barkan, Да, вы правы. Визуально врядли юзеру нужно показывать 1 млн записей. И все таки, чисто интересно сделать асинх.дозагрузку с DataGridView, пусть даже данное решение практического применения не будет иметь https://msdn.microsoft.com/en-us/library/15a31akc(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 10:52 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
В грид биндить через биндингсоурс Читать SQLDataReader-ом кучу строк и добавлять новые через БиндингСоурс ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2017, 18:05 |
|
Асинхронная дозагрузка данных в DataGridView при большой выборке (1 млн записей). Потоки.
|
|||
---|---|---|---|
#18+
Виртуальный режим работы, https://msdn.microsoft.com/ru-ru/library/15a31akc(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2017, 14:20 |
|
|
start [/forum/topic.php?fid=20&msg=39463297&tid=1399870]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 246ms |
0 / 0 |