有用过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.
...全文
2632 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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; 跑完关闭,看提示哪里泄露。
  • 打赏
  • 举报
回复
没用过,有什么优点?
ZeosDBO is a database middleware components for Borland development tools, including Delphi, C++ Builder and Kylix. The following compilers are supported: Delphi 5 - 7C++ Builder 5 - 6Kylix 2 - 3ZeosDBO supports direct connectivity to the following databases using the vendor provided, native interface: MySQL 3.20 - 4.1PostgreSQL 6.5 - 7.4Firebird 1.0 - 1.5Interbase 5.0 - 7.5Microsoft SQL Server 7, 2000Sybase ASE 12.0, 12.5Oracle 9iSQLite 2.8For other databases we propose to use implemented Active Data Objects (ADO) Bridge. Advantages of using ZeosDBO: Platform independance. The ZeosDBO is highly generic. Applications written in ZeosDBO can be migrated across databases without major changes. ZeosDBO is open source, written for usability and extensibility. ZeosDBO leverages the amazing power of the Delphi development environment without relying on a performance killing middleware. ZeosDBO is an extremely thin abstraction layer, unlike ‘thick‘ layered protocols like ADO and BDE. Package contents: ZCore - Core classes and interfaces. Contains Java style objects and collections as well as compatibility types and functions. ZParseSql - SQL specific for syntax and lexical analysis. ZPlain - Native plain API to supported SQL servers. ZDbc - Port of Java Database Connectivity API (JDBC 2.0). DBC API acts as intermediate layer between Plain API and highlevel TDataset or DBExpress components. ZComponent - visual components descended from TDataset. Installed components: TZConnection: This component encapsulates the database connection and transaction management. TZReadOnlyQuery: TDataset component to execute SQL queries and process data in read-only mode. TZQuery: TDataset component which allows data modifications in regular and cached mode. TZUpdateSQL: Analog of standard TUpdateSQL component to explicite definition of Insert/Update/Delete SQL statements for TDataset modifications. TZStoredProc: The component to execute SQL stored procedures. TZSQLProcessor: The component to execute SQL scripts for different SQL and various delimiter types. TZSQLMonitor: The component to monitor all outgoing SQL queries and other logging information. TZSQLMetadata: Specialized TDataset component which provides an access to database metadata such as tables, columns, indices, etc.

5,928

社区成员

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

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