powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять сбоит ADO в Intraweb с ciMultiThreaded
23 сообщений из 48, страница 2 из 2
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837207
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще, видимо нужно двигаться в сторону пула соединений. Как вариант, это жор памяти может быть связан с тем, что, как я уже писал, в новом потоке создается соединение, а по завершении потока - уничтожается. А Zeos тянет клиентскую DLL от MySQL.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837208
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что нагуглилось:

ZeosLib/TConnectionPool

https://github.com/delphipascal/zeoslib/blob/master/zeos-7.0.4/src/dbc/ZDbcPooled.pas
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837209
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, что возможно в Zeos уже есть класс пула соединений.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837215
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо, буду смотреть. Хотя.... я сам ведь уже писал, что если убрать запрос, и оставить только создание и уничтожение коннекта, то память не расходуется.... прям заколдованный круг какой-то.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837268
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что у вас в той части, которую "убираете"? Только лишь создание датасета, его открытие и уничтожение? Или ещёчто-нибудь?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837270
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот весь тестовый код:

Код: 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.
      ZConnection:=TZConnection.Create(Self);
      ZConnection.User:='user';
      ZConnection.Password:='11112222';
      ZConnection.Database:='db_test';
      ZConnection.HostName:='192.168.1.152';
      ZConnection.LibraryLocation:='C:\Program Files (x86)\MySQL\MySQL Server 5.7\lib\libmysql.dll';
      ZConnection.Port:=3307;
      ZConnection.Protocol:='mysqld-5';
      ZConnection.Connected:=True;


      ZQuery:=TZQuery.Create(Nil);
      ZQuery.Connection:=ZConnection;


      ZQuery.SQL.Clear;
      ZQuery.SQL.Add('Select * from  test_table limit 0,1');



       ZQuery.Open;

       CreateGUID(MyGUID);
       Str_MyGUID:=GUIDToString(MyGUID);  // P_Key
       Delete(Str_MyGUID,1,1);
       Delete(Str_MyGUID,37,1);


      ZQuery.Append;

      ZQuery.FieldByName('record_id').AsString:=Str_MyGUID;
      ZQuery.FieldByName('unix_timestamp').AsInteger :=DateTimeToUnix(Now)-10800;
      ZQuery.FieldByName('time_begin').AsInteger :=DateTimeToUnix(Now)-10800;
      ZQuery.FieldByName('room_id').AsString:='6D4E0BC7-4265-41B9-8DE6-A6C54B28805E';

      ZQuery.Post;


      ZQuery.EmptyDataSet;


      ZQuery.Close;
      ZQuery.Free;

      ZConnection.Connected:=False;
      ZConnection.Free;



Соответственно, убирал все, что относиться к ZQuery. Но тут выяснилась еще интересная штука. Похоже, я был не совсем прав в отношении того, что память уходит ZQuery. Если сделать один коннект (визуальный, на форме) и к нему цеплять динамически создаваемые ZQuery, то память похоже не теряется. Правда, в таком кривом режиме это все работает на несколько сот строк, потом падает. Но занятая память практически не растет.

Похоже, нужно самым серьезным образом подумать про пул соединений. Но про использование ZeosLib/TConnectionPool не нашел вообще ничего! И на западных форумах люди пишут про то же - ничего нет.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837285
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю Self в этом коде?

Код: pascal
1.
ZConnection:=TZConnection.Create(Self);



Вы же в потоке TThread, или я путаю?
Но вообще, в любом случае здесь лучше nil.

Так же, вы уверены, что по ходу не вылетает исключение? У вас нет try..except чтобы эио проверить. Но это не так важно, как то, что освобождения лучше упаковать в try..finally. Вдруг в этом причина утечки памяти...
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837302
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён,

Спасибо за помощь!

Пробовал и с nil - разницы в данном случае нет. На самом деле вчера поздно вечером сделал try..except и счетчик. За ночь на 79000 вставок всего одна ошибка - какая, не скажу правда. Теперь на всякий случай сделал освобождение в try..finally. Но потребляемая память как росла, так и растет.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837331
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,

Может попробовать на офф-форуме Zeos это спросить?..
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837344
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и попробуйте FastMM4. Его надо будет первым в USES'e в .dpr-файле проекта поставить. От FastMM4 много пользы: ускорение программы, лучшая работа с кучей, диагностика утечек памяти.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837362
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подумал... в Delphi с 2006-ой версии итак стоит урезанная версия FastMM4.
Но все-равно, попробуйте с полной, вдруг поможет как-нибудь.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837394
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форум Zeos попробую конечно, но наши зарубежные коллеги что-то не очень о нем отзываются. Видел там подобное сообщение, что ZQuery жрет память, сошлись что это проблема OC (не понимаю). А про ихний пуд коннектов вообще никто не ответил. Как будто он сам себя написал (этот модуль) Ж-)
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837403
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще с ADO облом не реальный конечно.
Zeos - в отличие от ADO пишет хотя бы. Но память, память....
MySQLDirect - это еще 2005 год.

Может еще что-то есть?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837409
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh> А вообще с ADO облом не реальный конечно.

Кто и где делает CoInitFlags:=COINIT_MULTITHREADED?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837413
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/* пока другие не ответят */


вариант 1
готовы выделить 200$ (или 300$ если с исходниками) за MyDAC ? ( https://www.devart.com/mydac/editions.html )


вариант 2
вот попался продукт 2009 года. Может и хватит вам, если заведется конечно. Там и примеры есть, в том числе и многопоточные. Только оформлен не в виде компонентов, а в виде библиотеки функций для доступа к MySQL.

mysql.pas ( http://www.audio-data.de/mysql.html )
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837444
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
сейчас заметил, mysql.pas (вариант 2) лицензирован Mozilla Public License Version 1.1
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837610
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать с памятью поискать концы самому, если сильно нужно
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837627
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 2015 году уже искали - и решения не нашли, похоже.
http://zeoslib.sourceforge.net/viewtopic.php?t=20838


P.S От отчаяния опять вернулся к ADO. Четыре клиента долбят сервер. Более 20 000 записей уже в базе. Приложение занимает в памяти 17,6 мб, а не 300-500-800 как с Zeos. Что за...


Код: 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.
Try

      AConnection:=TADOConnection.Create(Nil);
      AConnection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=My_SQL;Initial Catalog=db_video';
      AConnection.Connected:=True;


      AQuery:=TADOQuery.Create(Nil);
      AQuery.Connection:=AConnection;


      AQuery.SQL.Clear;
      AQuery.SQL.Add('Select * from  record_table limit 0,1');

       AQuery.Open;

       CreateGUID(MyGUID);
       Str_MyGUID:=GUIDToString(MyGUID);  // P_Key
       Delete(Str_MyGUID,1,1);
       Delete(Str_MyGUID,37,1);


      AQuery.Append;

      AQuery.FieldByName('record_id').AsString:=Str_MyGUID;
      AQuery.FieldByName('unix_timestamp').AsInteger :=DateTimeToUnix(Now)-10800;
      AQuery.FieldByName('time_begin').AsInteger :=DateTimeToUnix(Now)-10800;
      AQuery.FieldByName('room_id').AsString:='6D4E0BC7-4265-41B9-8DE6-A6C54B28805E';

      AQuery.Post;


      AQuery.Close;
      AQuery.Free;

      AConnection.Connected:=False;
      AConnection.Free;




      Str_MyGUID:='';

        Except
          Unit3.Err_Count:=Unit3.Err_Count+1;
          Form3.Label1.Caption:='DB_Err='+IntToStr(Unit3.Err_Count);

        End;
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837636
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, за прямое обращение к визуальному компоненту из потока не ругайте - мы тут более серьезные проблемы ловим
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837639
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh> Четыре клиента долбят сервер. Более 20 000 записей уже в базе
Фигня. Тут и тормозов-то нет. Зачем тебе потоки?
____________
И всё таки, где сидит CoInitFlags := COINIT_MULTITHREADED?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837648
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я полагаю, что приложение само "понимает", что нужно работать в многопоточном режиме, благодаря тому, что в Intraweb, а именно в IWServerController, свойство ComInitialization установлено в "ciMultiThreaded"
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837654
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, я вообще не уверен, что для моего приложения обязателен "многопоточный апартамент", что, по идее, и делает и COINIT_MULTITHREADED, и ComInitialization = "ciMultiThreaded"

Вероятно, достаточно и отдельных апартамент на каждый поток. Нужно попробовать с ComInitialization = "ciNormal"...
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837658
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Фигня. Тут и тормозов-то нет. Зачем тебе потоки?

Извиняюсь, просмотрел сначала. Дело в том, что у меня по сути сервер, обслуживающий в Intraweb GET-запросы в событии TIWServerController.IWServerControllerBaseBeforeDispatch. А тут, как я понимаю, новый поток и стартует. Он же участвует в обработке запросов от клиентов, тех же браузеров.
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять сбоит ADO в Intraweb с ciMultiThreaded
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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