![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Устранение утечек памяти в серверных приложениях Delphi с использованием 64-битного RTLDelphi , Синтаксис , Память и УказателиУтечки памяти в серверных приложениях на Delphi могут быть вызваны различными причинами, в том числе и ошибками в RTL (Runtime Library) при работе в 64-битной версии. В данной статье мы рассмотрим проблему утечек памяти, обнаруженную в Win64 версии Delphi RTL во время завершения работы потока, и предложим возможные пути решения этой проблемы. Проблема утечек памяти в Win64 версии DelphiРазработчик столкнулся с проблемой утечек памяти в серверном приложении, использующем Indy TIdTCPServer и написанном на Delphi XE2. Приложение было многопоточным и подключалось к базе данных. В 32-битной версии приложения утечек памяти не наблюдалось, в то время как в 64-битной версии память увеличивалась на 20 МБ в день. После тщательного анализа кода и использования инструментов от Microsoft для отслеживания утечек памяти, таких как DebugDiag и XPerf, разработчик пришел к выводу, что в 64-битном RTL Delphi есть фундаментальный баг, который приводит к утечкам памяти при отсоединении потока от DLL. Репродукция проблемыПроблема была воспроизведена на простом проекте, состоящем из хост-приложения и библиотеки, собранных в Delphi XE2. Библиотека статически связывалась с хост-приложением, которое создавало потоки, вызывающие процедуру из библиотеки и завершающие свою работу. Код примераПример кода библиотеки:
Пример кода хост-приложения:
Анализ утечек памятиИспользуя инструменты отладки, разработчик выяснил, что утечки памяти происходят из-за неправильного управления памятью TLS (Thread Local Storage) при завершении потока. В коде пути, отвечающего за утечки, были обнаружены следующие функции:
Возможные решения
Пример кода с использованием Exit вместо Abort
ЗаключениеУтечки памяти в многопоточных серверных приложениях на Delphi могут быть серьезной проблемой, особенно в 64-битных версиях. Разработчикам важно быть в курсе текущих проблем RTL и следить за обновлениями среды разработки. При необходимости следует применять альтернативные методы управления потоками и избегать использования Устранение утечек памяти в серверных приложениях Delphi с использованием 64-битного RTL, вызванных ошибками в RTL при работе в 64-битной версии и анализ методов их решения. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Память и Указатели ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |