Страница 1 из 1

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

Добавлено: Пн 30 сен 2019 10:45
cangaroo
Добрый день.
Приложение скомпилировано для 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)
Исходник приложения ниже:

Код: Выделить всё

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

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

Добавлено: Вт 01 окт 2019 17:26
MaximG
Мы исследуем описываемую проблему и сообщим Вам о результатах как только получим их

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

Добавлено: Чт 03 окт 2019 13:24
MaximG
Мы исправили описываемую Вами ошибку. Исправление войдет в следующую версию ODAC. В качестве временного решения мы можем выслать Вам ночную сборку нашего продукта. Для этого сообщите номер своей лицензии и интересующую Вас версию IDE с помощью формы e-support : https://www.devart.com/company/contactform.html

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

Добавлено: Пт 04 окт 2019 13:51
cangaroo
Спасибо вам, что исправили ошибку.
Пытаюсь перейти по адресу формы e-support : https://www.devart.com/company/contactform.html (который вы указали) ввожу email указанный при регистрации на форуме devart и пароль от логина на форуме devart, но получаю ошибку - Invalid user name or password (хотя причем тут username когда требуется указать email?)
Что я делаю неправильно?

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

Добавлено: Пт 04 окт 2019 13:58
cangaroo
Разобрался, что там за email и пароль нужно вводить. Форму заполнил.
Жду от вас ночную сборку.

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

Добавлено: Вт 08 окт 2019 10:06
MaximG
Для получения ночной сборки нашего продукта, включающей все необходимые изменения, необходимо иметь действующую подписку. Срок действия Вашей подписки на ODAC истек. Для ее продления воспользуйтесь своей учетной записью Devart на портале https://secure.devart.com, используя адрес электронной почты в качестве логина. После того, как вы нажмете кнопку «Renew now», вы будете перенаправлены на страницу оформления заказа, где сможете выбрать необходимый способ оплаты, заполнить личную информацию и оформить заказ.