Delphi Form.Pas утечка памяти? - PullRequest
3 голосов
/ 03 ноября 2010

HI

У меня есть библиотека динамической компоновки в Delphi 2006, в которой в формуле использований Form.pas.

Если я загружаю dll, а затем немедленно выгружаю ее в цикле forСкажем, 10000 раз, память медленно поднимается.Однако если я возьму Forms.pas из условия использования dll, то проблема исчезнет.

Код очень прост

Вот мой код для dll:

library Project1;

uses
  Forms;

begin

end.

Вот мой код для вызывающего приложения:

procedure TForm1.Button1Click(Sender: TObject);
var
  t_ImportHandle: LongInt;
  t_Index: Integer;
begin
  for t_Index := 0 to 10000 - 1 do
  begin
    t_ImportHandle := LoadLibrary('Project1.dll');
    FreeLibrary(t_ImportHandle);
  end;
 end;

Кто-нибудь еще может воспроизвести это или узнать, в чем причина и как ее исправить?

Ответы [ 2 ]

8 голосов
/ 03 ноября 2010

TApplication.Create использует функцию MakeObjectInstance в Classes.pas.MakeObjectInstance выделяет 4 КБ буфер с помощью VirtualAlloc, но не освобождает его, поэтому каждый раз, когда вы загружаете / выгружаете библиотеку DLL, она будет сильно протекать.Андреас Хаусладен имел обыкновение иметь сообщение об этом в блоге, но похоже, что он снял его. CodeCentral опубликовано исправление, которое также входит в состав пакета VCL Fix Pack Андреаса.

0 голосов
/ 03 ноября 2010

Возможно, это не утечка, а проблемы с фрагментацией диспетчера памяти.

Почему бы не попробовать использовать расширенное ведение журнала FastMM и посмотреть, действительно ли есть утечка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...