Indy держит сокет даже при завершения подключения, пока сама система не утилизирует, а утилизировать она может и через 2 суток. это плохо если на сокет понавешана логика, Вот весит кусок в памяти логики, только потому что система не утилизировала сокет.
но это на стороне сервера, Спрятанная логика работы с сокетом. Там сделано все чтобы компонентами можно было подключать и отключать модули. SSL, IdMessage. и др.
Так что делать нагруженные приложения на Indy это рискованно.
Aleks69 писал(а): А тестовый код вот, если его просто поместить под кнопку (можно и таймер наверное) после нескольких сот нажатий отлично видно, как растет объем памяти, потребляемой программой.
попробуйтe FreeAndNil(ZQuery); FreeAndNil(ZConnection) вместо ZQuery.Free и ZConnection.Free; я точно не помню, это меня спасало при написании при высоконагруженных сервисов. Потери в памяти свелись к нулю, когда я стал FreeAndNil вместо Free делать, вроде в куче не совсем утилизируются объекты, либо сборщик мусора очень ленивый, не поспевает убирать
Кстати потери памяти хорошо тестятся при проверки кучи, есть такая галка при компиляции и отладки. Если программа завершилась с текстом в каких местах есть потери. то значит прога не сбалансированная. Хорошо помогает этот check heap.
Сам рост памяти возможен даже из-за системы, линух этим страдает. Если работаете с переменным массивом данных то рост обеспечен, линух сильно не стремится утилизировать мусор и освобождать память, он лучше возьмет из новых участков. Возможно в Windows лучше работа идёт.
Кстати в Java еще хуже обстоят дела. У меня Android Studio при 4Гб оперативы плохо вел себя, только при 8Гб стал лучше работать.
Так что лучше чекайте Heap - 100% гарантия на текучесть памяти. Правда есть еще libmysql.dll там может быть "открытия чудные" ждут.
Добавлено спустя 6 минут 9 секунд:debi12345 писал(а):Соберите Вашу прогу с отладочной инфой и запустите в ее Valgrind
я не осилил Valgrind, у меня логи не читались Valgrind
Добавлено спустя 2 минуты 25 секунд:Heap чем хорош, тем что если вы хотите видить действинную чистоту то нужно позаботится об правильном завершении проги. Он вынуждает делать корректный выход из программы..