|
|
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги! Вопрос пространный, практически без кода. Есть сервис c неким образным классом и списком Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Каждый экземпляр класса обращается к заданному IP адресу, отправляет стартовую команду а-ля Start и далее бесконечно читает и парсит полученные текстовые наборы данных (неисправляемо на иные форматы, такая задумка инженеров). Скорость чтения - около 10 наборов по 80 символов в секунду (~800 знаков/сек) каждым классом. Данные поступают пакетно, когда процедура ParseReceivedData обнаруживает финальный символ (например, символ "!"), то формируется SQL запрос в AdoQuery. AdoQuery привязано к AdoConnection в DataModule. Ситуация: Если создано менее 16 классов, то данные поступают без проблем. Если добавляю 16+ классы, то рандомно некоторые классы перестают обрабатывать приходящие данные. В логе системы я вижу текст поступившего пакета, но нет информации о входе в процедуру парсинга и следовательно нет записи в БД. Может ли повреждаться память при столь агрессивном чтении и обработке данных и приводить к невозможности выполнения процедуры внутри класса или необходимо\желательно разнести классы по разным потокам? Может быть дело в IDTelnet, но как его проверить? Может кто-то уже сталкивался с таким? Может быть стоит пересмотреть архитектуру и есть похожие решения? Никаких пустых try except end в коде нет, все ошибки сразу попадают в лог. Сервис стартует и останавливается без ошибок, в EventLog тоже всё чисто. Из глобального только DataModule и AdoConnection на нём и ArrMyClass. Все обработки только внутри класса. Windows Server 2012, Delphi Tokyo 10.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2020, 14:30 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
Kast2K В логе системы я вижу текст поступившего пакета, но нет информации о входе в процедуру парсинга и следовательно нет записи в БД. Ищите ошибку между этими событиями. Добавляйте в лог больше сообщений о состоянии системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2020, 16:33 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
простите, а где отдельный adoconnection для каждого adoquery при многопотоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2020, 18:10 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
энди простите, а где отдельный adoconnection для каждого adoquery при многопотоке? У него и нет многопотоков. Спрашивает - нужно-ли? Kast2K или необходимо\желательно разнести классы по разным потокам? Что для меня вопрос странный. Это было необходимо делать изначально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 07:34 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
goldmi45, боюсь что дело не в этом Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. энди, Разве одного общего AdoConnection не достаточно на несколько (десятков) одновременно работающих классов? авторThe connection provided by a single TADOConnection component can be shared by multiple ADO command and dataset components ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 07:37 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
wadman энди простите, а где отдельный adoconnection для каждого adoquery при многопотоке? У него и нет многопотоков. Спрашивает - нужно-ли? Kast2K или необходимо\желательно разнести классы по разным потокам? Что для меня вопрос странный. Это было необходимо делать изначально. Добрый день! Т.е. самое верное было создавать N-потоков, в каждом из которых крутится свой класс с IDTelnet, Adoconnection, правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 07:40 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
Kast2K wadman пропущено... У него и нет многопотоков. Спрашивает - нужно-ли? пропущено... Что для меня вопрос странный. Это было необходимо делать изначально. Добрый день! Т.е. самое верное было создавать N-потоков, в каждом из которых крутится свой класс с IDTelnet, Adoconnection, правильно? Не знаю, что такое IDTelnet и как оно живет в многопоточке, а в остальном - да. Все соединения и запросы разнести по потокам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 07:54 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
Kast2K энди, Разве одного общего AdoConnection не достаточно на несколько (десятков) одновременно работающих классов? авторThe connection provided by a single TADOConnection component can be shared by multiple ADO command and dataset components Достаточно, при условии что они все работают в одном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 09:20 |
|
||
|
Ограничения по количеству компонент?
|
|||
|---|---|---|---|
|
#18+
Kast2K, вполне возможно, что TEQP.DataAvailableOnTelnet вызывает из другого потока и тогда у это многопоточное приложение со всеми вытекающими. проверить - поставить брейк пойнт и посмотреть потоки View\Threads что ли, на каком потоке стоит селект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2020, 09:20 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39940429&tid=2038463]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 338ms |

| 0 / 0 |
