Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение утечки памяти в Delphi 10.2: настройка кодировки в заголовке ответа REST-запроса

Delphi , Синтаксис , Память и Указатели

Разработчики, работающие с технологиями на основе Delphi, иногда сталкиваются с неожиданными проблемами, такими как утечки памяти. В данной статье мы рассмотрим одну из таких проблем, связанную с использованием REST-запросов в Delphi 10.2 и способ её решения.

Описание проблемы

При выполнении REST-запросов в приложении на Delphi 10.2 был обнаружен неожиданный сбой в управлении памятью, который проявлялся в виде утечки памяти при работе с определенными URL. Это происходит только тогда, когда в заголовке ответа отсутствует указание на кодировку символов. В частности, запрос к URL, который возвращает заголовок Content-Type=application/json, приводит к утечке памяти, в то время как запрос с указанием кодировки Content-Type=application/json; charset=utf-8 памяти не теряет.

Пример кода, вызывающего утечку памяти

program RESTMemLeakTest;
{$APPTYPE CONSOLE}
uses
  System.SysUtils, IPPeerClient, REST.Client, REST.Types;
var
  RESTClient1: TRESTClient;
  RESTRequest1: TRESTRequest;
  URL: string;
begin
  ReportMemoryLeaksOnShutdown := True;
  URL := 'https://httpbin.org/post'; // URL, вызывающий утечку памяти
  //URL := 'https://jsonplaceholder.typicode.com/posts'; // URL без утечки памяти
  RESTClient1 := TRESTClient.Create(URL);
  RESTRequest1 := TRESTRequest.Create(nil);
  try
    try
      RESTRequest1.Client := RESTClient1;
      RESTRequest1.Method := rmPOST;
      RESTRequest1.Execute;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    RESTRequest1.Free;
    RESTClient1.Free;
  end;
end.

Возможное решение проблемы

Изменение свойства FallbackCharsetEncoding объекта TRESTClient на пустую строку позволяет избежать утечки памяти. Это свойство используется для указания кодировки символов, которая будет применяться в случае, если в заголовке ответа такая информация отсутствует. Установка свойства в пустую строку предотвращает выполнение кода, который может привести к утечке памяти.

RESTClient1.FallbackCharsetEncoding := '';

Обновления и комментарии

После обнаружения проблемы был создан отчет о баге (RSP-17695), который был решен в версии 10.2 Tokyo Release 1, выпущенной 8 августа 2017 года.

Альтернативные соображения

Существуют предположения, что проблема может быть связана с неправильным освобождением ресурсов, связанных с объектом TEncoding. Однако без дополнительной информации, такой как стек вызовов утечки памяти, точно определить причину проблемы сложно.

Заключение

Разработчикам, столкнувшимся с аналогичной проблемой, рекомендуется установить свойство FallbackCharsetEncoding в пустую строку для предотвращения утечки памяти. Это решение может быть применимо и в более ранних версиях, таких как Berlin Update 2, до выпуска исправления в Tokyo Update 1. Однако важно отметить, что использование пустой строки в качестве значения для кодировки может повлиять на обработку текста в приложении, поэтому перед применением этого решения следует тщательно его протестировать.

Создано по материалам из источника по ссылке.

Разработчики Delphi 10.2 сталкиваются с утечкой памяти при выполнении REST-запросов из-за отсутствия указания кодировки в заголовке ответа, и решение заключается в настройке свойства `FallbackCharsetEncoding` объекта `TRESTClient`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Память и Указатели ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-30 15:35:38/0.0052340030670166/1