Приложение скомпилировано для Target Platforms - Win64 на Delphi XE10 Seattle Professional, используется Devart ODAC 9.7.26 for Delphi 10, в приложении происходит коннект к БД ORACLE (Oracle Database 12c Release 12.1.0.1.0 - 64bit Production; CORE 12.1.0.1.0 Production; TNS for 64-bit Windows: Version 12.1.0.1.0 - Production; NLSRTL Version 12.1.0.1.0 - Production) примерно 4 раза в секунду. При этом наблюдается непрерывный рост потребляемой памяти, а также непрерывный PageFault (Столбцы "Память" и "Ошибки страниц" в Диспетчере задач Windows). Приложение запускалось в среде Windows 7 64 Профессиональная Servise Pack 1 и Windows Server 2008 R2 Enterprise Servise Pack 1 (64 bit)
Исходник приложения ниже:
Code: Select all
unit form_main;
interface
uses
  Winapi.Windows,
  System.SysUtils, System.Classes,
  Vcl.Controls, Vcl.Forms, Vcl.StdCtrls,
  Ora, OraCall;
type
  Tfrm_main = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FOraSession1: TOraSession;
    FOraQuery1: TOraQuery;
    FDoStop: boolean;
  public
    { Public declarations }
  end;
var
  frm_main: Tfrm_main;
implementation
{$R *.dfm}
procedure Tfrm_main.FormCreate(Sender: TObject);
const
    qr = 'select * from ddaoutput order by id';
begin
  FDoStop:= False;
  FOraSession1:= TOraSession.Create(nil);
  FOraSession1.ThreadSafety:=   True;
  FOraSession1.ConnectPrompt:=  False;
  FOraSession1.Options.Direct:= True;
  FOraSession1.Options.UseUnicode:= True;
  FOraSession1.ConnectString:= 'testuser/[email protected]:1521:xe';
  FOraQuery1:= TOraQuery.Create(nil);
  FOraQuery1.SQL.Clear;
  FOraQuery1.SQL.Text:= qr;
end;
procedure Tfrm_main.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FOraSession1.Free;
  FOraQuery1.Free;
end;
procedure Tfrm_main.Button1Click(Sender: TObject);
begin
  while True do
  begin
    try
      FOraSession1.Connect;
      FOraQuery1.Session:= FOraSession1;
      FOraQuery1.Open;
      Application.ProcessMessages;
    finally
      FOraQuery1.Close;
      FOraSession1.Disconnect;
      sleep(250);
    end;
  end;
end;
end.Также, в приложении был оставлен только коннект, (все что связано с запросом было удалено) - результат тот же, непрерывная утечка памяти и непрерывный PageFault.
Также изменили БД, выполнили коннект к Oracle XE 64 bit - результат тот же, непрерывная утечка памяти и непрерывный PageFault.
Прошу прокомментировать данную ситуацию.