|
|
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Из головы вылетело... Не могу вспомнить, как называется функционал, когда туда передаешь свою процедуру и она выполняется там в отдельном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 20:37 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11, Это? http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.TThread.CreateAnonymousThread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 20:51 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
По-моему, я о чем-то другом когда-то читал. Вроде похоже, а вроде нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 20:53 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
TTask ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 20:59 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Вопрос в том, а можно ли с помощью TTask заполнять визуальные компоненты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 22:41 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 Вопрос в том, а можно ли с помощью TTask заполнять визуальные компоненты? Через synchronize. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 22:45 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
т.е. внутрь анонимной процедуры TTask нужно вставить ещё одну анонимную процедуру с TThread.Synchronize http://www.proghouse.ru/programming/36-delphi-xe7-ppl?hitcount=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:08 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
-- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:08 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Получился вот такой монстр procedure FillCxCheckListBox Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:26 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
А для чего тут доп.поток понадобился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:37 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
DmSer, ты имеешь ввиду, для чего понадобился TThread.Synchronize? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:39 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
И он в том числе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:40 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Я же написал. Или получилось непонятно? На форме есть, например, 10 списков. Если вызывать процедуры заполнения по очереди, то каждая следующая будет вызвана только после того, как закончиться предыдущая. Но зачем же ждать? Если можно все 10 списков заполнить почти одновременно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:46 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Стало сильно быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:53 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
нет но это данных в таблицах мало но я надеюсь, что на медленных ПК и с бОльшим количеством данных будет чуть ощутиммее тут вот в чем прикол, оно ж как получается: то в заполнении списков треть секунды выиграл, то в загрузке настроек и параметров треть секунды выиграл, в итоге даже если на 1 секунду быстрее, уже приятнее. Если пользователь форму открывает не 5 секунд, а 1-2, то уже классс.. Вот эта форма когда-то открывалась 5-7 секунд, я давно об этом где-то здесь писал, ещё и с Рустамом, помню, на этот счет общались на форуме, а теперь - меньше 2 секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:59 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11, Вызывая TThread.Synchronize для всего тормозящего кода целиком ты добьешься только того что все потоки будут выполнятся по очереди. Короче фигню ты написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2020, 23:59 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Почему по очереди? Ведь заполняют разные визуальные компоненты. Плюс отрисовки нет (я так предполагаю), это выполняется в событии FormShow и на закрытой вкладке PageControl`а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 00:04 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11, Все что находится в Synchronize выполняется в главном потоке. По очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 00:08 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Т.е. физически никак не заполнить списки моментально одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 00:10 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 Т.е. физически никак не заполнить списки моментально одновременно? Можно сделать списки виртуальными, заполнять хранилища данных в потоках, а потом через Synchronize передавать заполненные списки в основное приложение. И да, подключение к БД в каждом потоке должно быть своё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 00:16 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
alekcvp, Да ему достаточно только запрос в БД за пределы Synchronize вынести и уже все ускориться в разы. И никакие временные списки не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 00:21 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Чтобы q.ExecQuery был вне TThread.Synchronize? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 10:38 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 Чтобы q.ExecQuery был вне TThread.Synchronize? Всё, кроме передачи списка, который можно собрать в отдельный TStringList. В чекбоксе потом достаточно сделать Items.Assign. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 10:48 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Если перенести строки TThread.Synchronize(nil, procedure() begin и поставить после q.ExecQuery, то вываливает несколько AV и ошибок, в том числе и при закрытии формы Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 11:17 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
В общем, почитал тему 21139822 , переделал так пока хотя бы без ошибок Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 11:36 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 Если перенести строки Переносить нужно тоже с умом... Покажи хоть. ЗЫ. Из потока вообще не лезь к визуальной части. Всё это лишнее. X11 Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А это вообще можно делать до запуска потока: X11 Код: pascal 1. Оставь в потоке только создание соединения, выполнение запроса и заполнение TStringList. Далее отдашь через синхронизацию этот список для заполнения списка контрола и после уже можно всё зачищать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 11:50 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
wadman Покажи хоть. не понял, что именно показать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:07 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
wadman Оставь в потоке только создание соединения а я не создаю в потоке никаких соединений, я думаю, что это не обязательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:09 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
wadman Оставь в потоке только создание соединения, выполнение запроса и заполнение TStringList. тогда получится два цикла 1. Заполнение TStringList. 2. Заполнение TcxCheckComboBox из TStringList. стоит ли овчинка выделки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:13 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 А какую роль выполняет TThread.Synchronize в этом коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:32 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
да, какую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:39 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 стоит ли овчинка выделки? Естественно. В 1-ой обращение к БД, 2-я операция заметно быстрее. X11 а я не создаю в потоке никаких соединений, я думаю, что это не обязательно X11 то вываливает несколько AV и ошибок, в том числе и при закрытии формы Удивительное упорство... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:40 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 да, какую? Никакой роли он здесь не выполняет. Его есть смысл вызывать только из доп. потока. А в последнем варианте доп.поток исчез. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 12:46 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
wadman Оставь в потоке только создание соединения, выполнение запроса и заполнение TStringList. если работа с БД будет в отдельном потоке, то в итоге визульный список не заполнится... вот как получается: запускаем отдельный поток, где создаем соединение, датасет, обращаемся к базе и наполняем StringList Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. после task.Start программа ждать не будет и сразу перейдет к циклу заполнения визуального списка из TStringList`а. А TStringList пока ещё наполняется из базы в отдельном потоке... как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:03 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11как быть? Выкинуть из картины StringList. В потоке получил строку - отослал её главному потоку на показание, читаешь следующую. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:06 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov отослал её главному потоку на показание Чуть больше модно информации? Куда именно отправять, как? С помощью какого функционала, Messages? Нужно создать ещё какую-то процедуру, которая будет ловить эти строки в главном потоке и заполнять визуальные списки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:10 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov В потоке получил строку - отослал её главному потоку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:16 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
В общем, лучше оставить как было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:17 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11Куда именно отправять, как? Туда, где эти данные нужны и так как это место готово их принимать. X11С помощью какого функционала, Messages? Если эти твои "списки" собираются для отображения в GUI - да. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:20 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11В общем, лучше оставить как было Да, "работает - не трогай" для чайников всегда актуально. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 13:33 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11 как быть? Тут и можешь дернуть синхронизацию, после закрытия запроса. Операция на фоне остального минимальная по времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 14:19 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Использование дополнительных потоков для параллельной загрузки данных из БД даст положительный эффект, например, в следующих случаях: 1) база данных удалённая, большое время тратится на ожидание отправки и приёма запросов. 2) база данных локальная, но хранится на HDD, данные ещё не загружены в кэш в ОЗУ и сильно фрагментированы. При сборе фрагментированных данных по всей поверхности HDD может уйти уйма времени. Каково будет в этом сценарии ускорение от параллельной загрузки данных не могу сказать, как повезёт. 3) SQL-запросы написаны плохо, либо в базе данных не хватает индексов для быстрого поиска. Т.е. запросы выполняются долго. При этом СУБД способна такие запросы выполнять параллельно. Если же база локальная и списки хранятся компактно (либо находятся в кэше в ОЗУ), а запросы выполняются эффективно, то скорее всего никакого ускорения от параллельной загрузки не будет. Очень важный момент: параллельная загрузка в каждом потоке должна выполняться через отдельное подключение к базе данных. При этом, если эти подключения создавать каждый раз заново в доп. потоках, то на создание подключений может уйти времени больше, чем на загрузку списков. Подключения должны быть созданы заранее. Для этого следует использовать пул готовых подключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 12:29 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
DmSer Очень важный момент: параллельная загрузка в каждом потоке должна выполняться через отдельное подключение к базе данных И не важно, какая библиотека доступа? А может FibPlus и/или DevArt потокобезопасны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 13:31 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
DmSer Подключения должны быть созданы заранее. Для этого следует использовать пул готовых подключений. Вот у TUniConnection (UniDAC DevArt) есть свойство PoolingOptions. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 13:32 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11А может FibPlus и/или DevArt потокобезопасны... Потокобезопасность тут ни при чём. СУБД должна поддерживать асинхронное API иначе сквозь одно соединение больше данных не пропихнуть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 13:49 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
Firebird 3, я надеюсь, поддерживает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 15:16 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11Firebird 3, я надеюсь, поддерживает? Нет. Полная сериализация вызовов в рамках коннекта. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 15:20 |
|
||
|
Заполнение несколькоких списков в отдельных потоках
|
|||
|---|---|---|---|
|
#18+
X11, можно многими потоками данные из базы извлекать через несколько соединений. это скорее всего будет быстрее. поможет ли это заполнить форму быстрее - сложный вопрос, потому как мне кажется что основные тормоза у тебя будут не с базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2020, 21:07 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038259]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 448ms |

| 0 / 0 |
