powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ограничения по количеству компонент?
10 сообщений из 10, страница 1 из 1
Ограничения по количеству компонент?
    #39940268
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги!

Вопрос пространный, практически без кода.
Есть сервис c неким образным классом и списком
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
TMyClass=class
   FAQ:TADOQuery;
   FidTeLNt:TIDTelnet;
   private
     procedure ParseReceivedData(const AText:string);
end;

TArrMyClass=class(TObjectList<TMyClass>)



Каждый экземпляр класса обращается к заданному 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
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940302
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K
В логе системы я вижу текст поступившего пакета, но нет информации о входе в процедуру парсинга и следовательно нет записи в БД.

Ищите ошибку между этими событиями. Добавляйте в лог больше сообщений о состоянии системы.
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940332
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
простите, а где отдельный adoconnection для каждого adoquery при многопотоке?
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940423
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди
простите, а где отдельный adoconnection для каждого adoquery при многопотоке?

У него и нет многопотоков. Спрашивает - нужно-ли?
Kast2K
или необходимо\желательно разнести классы по разным потокам?

Что для меня вопрос странный. Это было необходимо делать изначально.
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940424
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45,

боюсь что дело не в этом
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TEQP.DataAvailableOnTelnet(Sender: TIdTelnet;
  const Buffer: TIdBytes);
var
  s:string;
begin
  s:=Trim(BytesToString(Buffer));
  Log('EQP'+Fid.Tostring+' received:'+s);
  ParseReceivedData(s);
end;

procedure TEQP.ParseReceivedData(const AText:string);
begin
  Log('EQP'+Fid.Tostring+' ParseReceivedData:'+AText);
  ... //обработка
end;



энди,
Разве одного общего AdoConnection не достаточно на несколько (десятков) одновременно работающих классов?
авторThe connection provided by a single TADOConnection component can be shared by multiple ADO command and dataset components
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940425
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
энди
простите, а где отдельный adoconnection для каждого adoquery при многопотоке?

У него и нет многопотоков. Спрашивает - нужно-ли?
Kast2K
или необходимо\желательно разнести классы по разным потокам?

Что для меня вопрос странный. Это было необходимо делать изначально.


Добрый день!
Т.е. самое верное было создавать N-потоков, в каждом из которых крутится свой класс с IDTelnet, Adoconnection, правильно?
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940429
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K
wadman
пропущено...

У него и нет многопотоков. Спрашивает - нужно-ли?
пропущено...

Что для меня вопрос странный. Это было необходимо делать изначально.


Добрый день!
Т.е. самое верное было создавать N-потоков, в каждом из которых крутится свой класс с IDTelnet, Adoconnection, правильно?

Не знаю, что такое IDTelnet и как оно живет в многопоточке, а в остальном - да. Все соединения и запросы разнести по потокам.
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940444
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K
энди,
Разве одного общего AdoConnection не достаточно на несколько (десятков) одновременно работающих классов?
авторThe connection provided by a single TADOConnection component can be shared by multiple ADO command and dataset components

Достаточно, при условии что они все работают в одном потоке.
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940445
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

вполне возможно, что TEQP.DataAvailableOnTelnet вызывает из другого потока и тогда у это многопоточное приложение со всеми вытекающими. проверить - поставить брейк пойнт и посмотреть потоки View\Threads что ли, на каком потоке стоит селект
...
Рейтинг: 0 / 0
Ограничения по количеству компонент?
    #39940876
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,
Как было ранее предложено, разнёс классы по потокам - проблем нет.
Для эксперимента довел количество до 150 потоков = зависаний или пропусков нет.

Большое спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ограничения по количеству компонент?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]