有用过zeosdbo的吗,我的程序每次读取表后内存一直在涨

李_军 2021-01-06 09:37:43
delphi7和delphi10.2.3都试过,zeosdbo-7.2.4-stable和zeosdbo-7.2.8-stable也都试过

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Activex,
Dialogs, StdCtrls, ZAbstractConnection, ZConnection, ZAbstractRODataset, ZAbstractDataset, ZDataset;


type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure TestFunc;
public
{ Public declarations }
end;

var
Form1: TForm1;
sQry: TZQuery; //TZQuery
ADOC: TZConnection;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 1000 do
TestFunc;
end;

procedure TForm1.TestFunc;
begin
try
try
ADOC.LoginPrompt := False;
ADOC.Connected := False;

ADOC.HostName := '192.168.3.50';
ADOC.Port := 3306;
ADOC.Database := 'HZST';
ADOC.User := 'root';
ADOC.Password := '28000066';
ADOC.Protocol := 'mysql-5';
ADOC.ClientCodepage := 'gbk';
ADOC.Connected := True;

sQry.Close;
sQry.SQL.Text := 'select * from Usertable';
sQry.Open;

OutputDebugString(PChar(sQry.FieldByName('username').AsString));

//
except

end;
finally
sQry.Close;
ADOC.Connected := False;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
coinitialize(nil);
ADOC := TZConnection.Create(nil);
ADOC.LoginPrompt := False;
sQry := TZQuery.Create(nil);
sQry.Connection := ADOC;
ADOC.Connected := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
sQry.Free;
sQry := nil;

ADOC.Free;
ADOC := Nil;
CoUninitialize;
end;

end.
...全文
2654 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
奶粉超人 2021-03-13
  • 打赏
  • 举报
回复
我一直有用zeosdbo,没发现内存不断增涨的问题,建议看看是否有内存泄露吧
李_军 2021-01-15
  • 打赏
  • 举报
回复
找到原因了,后面的版本里
ADOC.LoginPrompt := False;
ADOC.Connected := False;
ADOC.HostName := G_SQLSERVERName;
ADOC.Port := G_SQLPort;
ADOC.Database := G_SQLDataName;
ADOC.User := G_SQLUserName;
ADOC.Password := G_SQLPassWord;
ADOC.Protocol := 'mysql-5';
ADOC.ClientCodepage := 'gbk';
ADOC.UseMetadata := False;
ADOC.Connected := True;

加上这行 ADOC.UseMetadata := False;内存就不会一直涨了,搞了我这么多天
李_军 2021-01-14
  • 打赏
  • 举报
回复
结贴,同样的代码,重新去下了一个zeosdbo7.1.4-stable ,确实没有问题了,不知道他们这个版本后都搞了什么,越搞越差了
李_军 2021-01-14
  • 打赏
  • 举报
回复
我每次点都是一直增加,所以每次调用一次那个测试循环,每次加10M,一直加
JohnYale 2021-01-14
  • 打赏
  • 举报
回复
按钮点第一次,内存增加一点。再点,内存就不再增加。D2017,zeosdbo7.1.4-stable
李_军 2021-01-12
  • 打赏
  • 举报
回复
ReportMemoryLeaksOnShutdown := True;
跑完没有任何内存泄露的地方,是不是哪里需要设置,所以想找个用过的问问
tanqth 2021-01-12
  • 打赏
  • 举报
回复
引用 7 楼 李_军 的回复:
ReportMemoryLeaksOnShutdown := True; 跑完没有任何内存泄露的地方,是不是哪里需要设置,所以想找个用过的问问
我简单的查了官方的资料,没看到相关说明。
tanqth 2021-01-11
  • 打赏
  • 举报
回复
使用ReportMemoryLeaksOnShutdown := True;检测有没有内存泄露。 我估计应该不会有泄露,毕竟他也更新了若干版本的。那么真有可能是做了一些缓存或是每次使用做了一些什么记录(按理说,这些也应该可以进行设置的。)
李_军 2021-01-11
  • 打赏
  • 举报
回复
改用ADO没有任何问题,我看他这个已经这么多版本更新下来,按道理不应该有问题。连接那些都没问题,就是内存增长,每调用一次就是内存增长,不见下来。ADO就没这个问题,还有用过这个zeosdbo的吗,我就想找到是什么原因
大肚肥肥 2021-01-06
  • 打赏
  • 举报
回复
之前用过,但是没测试过内存增长问题 不建议使用zeosdbo 。。。。 用 FireDAC,连接池模式,多种数据库支持,我用来高mysql,postgresql。。超好用 https://blog.csdn.net/jhzhao2001/article/details/79059062
tanqth 2021-01-06
  • 打赏
  • 举报
回复
没用过。从你代码看,每次都是关闭了数据集的,会不会是他本身做了一些缓存。
pathletboy 2021-01-06
  • 打赏
  • 举报
回复
FormCreate里添加 ReportMemoryLeaksOnShutdown := True; 跑完关闭,看提示哪里泄露。
  • 打赏
  • 举报
回复
没用过,有什么优点?

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧