TOraSession утечка памяти

Discussion of open issues, suggestions and bugs regarding ODAC (Oracle Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
cangaroo
Posts: 2
Joined: Thu 26 Sep 2019 06:21

TOraSession утечка памяти

Post by cangaroo » Thu 26 Sep 2019 07:13

Добрый день.
Приложение скомпилировано для 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/tiger@192.168.X.Y: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.
Также, данное приложение было скомпилировано с Devart ODAC 11.0.1 Trial for Delphi 10 - результат тот же, непрерывная утечка памяти и непрерывный PageFault.
Также, в приложении был оставлен только коннект, (все что связано с запросом было удалено) - результат тот же, непрерывная утечка памяти и непрерывный PageFault.
Также изменили БД, выполнили коннект к Oracle XE 64 bit - результат тот же, непрерывная утечка памяти и непрерывный PageFault.
Прошу прокомментировать данную ситуацию.

ViktorV
Devart Team
Posts: 2780
Joined: Wed 30 Jul 2014 07:16

Re: TOraSession утечка памяти

Post by ViktorV » Fri 27 Sep 2019 13:43

Thank you for the information. We will investigate this UniDAC behavior and let you know the result.
Note that we have a Russian version of our forum where you can ask your questions in ru

cangaroo
Posts: 2
Joined: Thu 26 Sep 2019 06:21

Re: TOraSession утечка памяти

Post by cangaroo » Mon 30 Sep 2019 09:32

Thanks for the answer.
I will ask a question in the Russian-language forum.
But why UniDAC? My Question is about the ODAC...

ViktorV
Devart Team
Posts: 2780
Joined: Wed 30 Jul 2014 07:16

Re: TOraSession утечка памяти

Post by ViktorV » Mon 30 Sep 2019 09:38

Sorry for the inaccuracy in the previous post. I meant ODAC.

MaximG
Devart Team
Posts: 1395
Joined: Mon 06 Jul 2015 11:34

Re: TOraSession утечка памяти

Post by MaximG » Thu 03 Oct 2019 12:26

We've reproduced the issue and fixed it. The fix will be included in the next build of our product. As a temporary solution, we'll send you the download link for the nightly build of ODAC with the latest changes. For this, please specify your license number and the exact version of Delphi you are using via the e-support form (https://www.devart.com/company/contactform.html)

Post Reply