Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.07.2003, 19:17
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Это опять я странно жрётся оперативка и что то в простой задаче (однотредовой по замаслу) тредов много вот код, в коментариях написано кол-во тредов и сколько памяти кушается после выполнения строчки: program Project1; {$APPTYPE CONSOLE} uses SysUtils, Classes, ADODb, ActiveX; Var MySQL:TADOCommand; begin readln; //ОП: 1620 кб, Тредов:1 CoInitialize(nil); //ОП: 1664 кб, Тредов:1 MySQL:=Tadocommand.Create(nil); //ОП: 2432 кб, Тредов:2 MySQL.ConnectionString:='Строчка для коннекта к базе'; //ОП: 2440 кб, Тредов:2 MySQL.CommandText:='insert into proverka values(1,''Проверка')'; //ОП: 5620 кб, Тредов:7 !!!!!!!!!!!!!!!!!!!!!!! MySQL.Execute; //ОП: 5692 кб, Тредов:7 MySQL.free; MySQL:=nil; //ОП: 5696 кб, Тредов:7 CoUninitialize; //ОП: 5720 кб, Тредов:7 readln; //строчка конечно же выполняется после нажатия Enter ОП: 5756 кб, Тредов:5 end. Всё бы ничего, если бы после освобождения обьекта (MySQL.Free) память бы освобождалась и кол-во тредов обратно к еденице возвращалось. В чём дела, почему этого не происходит после освобождения обекта TADOCommand? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2003, 19:19
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Ещё раз, чтобы попонятней код был: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2003, 19:43
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Вероятно, это связано с пулингом - сохранением connection'ов в кеше. Через некоторое время все (или почти все) освободит. Проверь :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2003, 22:34
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Час прождал, ничего не поменялось.... Как было 7 тредов и 5 слишним мегов оперативки, так и осталось... Интересное наблюдение: Если окошко свернуть в начале проги, то от 4мегов остаётся 120 кб. Потом разворачиваешь его, так и остаётся 120, нажимаем Enter, происходит вставка записи, теперь 7 тредов и оперативки кушается почти под 5мегов. Опять сворачиваем, теперь приложение занимает 144 кбайта (но теже 7 тредов остаётся), разворачиваем, те же 144 кбайта и 7 тредов. Может кто нить обьяснит эти особенности, почему так всё странно с памятью работает. З.Ы. Не зависимо от того есть ли в программе строчки: MySQL.free; MySQL:=nil; При сворачивании разворачивании наблюдаются одни и теже числа с памятью и тредами. Вообще изучил поведение с этими строчками и без них, такое ощущение, что они ни как не влияют. А я всегда думал, что нужный компонент всегда лучше создавать динамически, а не кидать на форму во время проектирования, и когда он не нужен уничтожать его, экономишь так ресурсы, а оказывается толку от этого никакого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2003, 12:18
|
|||
|---|---|---|---|
Как то странно ADO работает: |
|||
|
#18+
Память возвращается не когда заканчивается приложение, а когда свободная память обратно требуется ОС. До того времени она остается как-бы зарезервирована за прилож. - на случай повторного использования. Т.е. с памятью у тебя ситуация м.б. нормальна. Посмотри, как Ворд память захватывает и возвращает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2003, 09:13
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
И с кол-вом тредов тоже всё в порядке, и они убьются когда ресурсов процессора не будет хватать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2003, 12:03
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Такая же проблема, только коннекты к БД делаю из потока (thread'a). Поток завершается, а память остается занятой. Ждать можно часами, память не возвращается. Следующие запуски потока отъедают новые объемы памяти. Свернув окошко приложения, получаю тот же эффект. Если приложение работает длительное время, свободной памяти вообще не остается. Это приводит к остановке работы потока. Пробовал настройки connection pooling - не помогло. Что же делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2003, 12:12
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
Я кстати, тоже самое делаю, там ниже есть мой пост ADO и Thread. Я думал это проблемы в моём потоке, и написал простое однопоточное приложение, которое точно так же работает как мой отделный поток, и увидел что прога эта ведёт себя так же как и с потоком, поэтому привёл пример простейшей проги, так как подумал если проблему решу в этой проге, то и решу в потоке, но как видно, похоже решений нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.07.2003, 13:59
|
|||
|---|---|---|---|
|
|||
Как то странно ADO работает: |
|||
|
#18+
У меня в одном потоке происходит коннект к Oracle и MSSQL server. Оказалось, что память пожирается после коннекта к Oracle. При коннекте к MSSQL все работает нормально. Я решил для коннекта к Oracle вместо ADO пользовать DOA, а для MSSQL оставил ADO, все заработало нормально. Когда я пользовал ADO для Oracle, каждый пуск потока пожирал очередные 400K. Наверное, в ADO есть какой-то глюк при установке связи с Oracle. Сейчас память отжирается до определенного предела (видимо, сколько надо приложению), потом процесс прекращается . Если открыть какие-нибудь другие приложения, например, Outlook, то программа отдает некоторую часть памяти. Таким образом, формулируем резюме: если твои потоки постоянно при каждом их пуске не отъедают большой кусок памяти, а делают это только до определенного предела, то это нормально. Для того, чтобы нигде не вызывать CoInitializе и CoUn..., добавь в главный модуль приложения (на Delphi, я думаю, похоже): #include <comobj.hpp> а в теле перед Application->Initialize() напиши CoInitFlags = 0; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&mobile=1&tid=2117655]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 413ms |

| 0 / 0 |
