我必须准备一个单独的单元来通过 TCP/IP 与另一个系统进行通信。
我创建了两个单元:Unit1带有TForm,和Unit2带有通信。
单元1:
uses ..., Unit2;
type
TForm1 = class(TForm)
Button1: TButton;
Circle1: TCircle;
...
var
Form1: TForm1;
Communication: TCommunication;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
Communication.ClientSocket1.Active := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Communication := TCommunication.Create;
end;
Run Code Online (Sandbox Code Playgroud)
单元2:
uses SysUtils, ScktComp;
type
TCommunication = class(TObject)
ClientSocket1 : TClientSocket;
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientOnConnect(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override;
end;
procedure TCommunication.ClientOnConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 7.
我有两个包含Form1和的单位Form2.在某些过程中会多次调用辅助表单,我非常担心内存使用情况.
当我启动该程序时,内存使用量约为2.1 MB.当Form2被调用时,内存增大到2.9 MB.在此过程之后,我关闭Form2并再次调用它来模拟常规使用,内存增长到3.1 MB,再次调用,内存增长到3.4 MB,3.6 MB,3.8 MB等.
内存使用是主要问题.
Form1这样叫Form2:
uses
Unit2;
...
private
{ Private declarations }
FChild : TForm2;
...
FChild := TForm2.Create(nil);
try
FChild.ShowModal;
finally
FChild.Free;
end;
Run Code Online (Sandbox Code Playgroud)
内部Unit2:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?有更好的解决方案吗?
请问,这不是一个简单的问题,因为这个程序将运行24小时,第二个表单将被多次调用.这意味着有时这个程序会冻结计算机.
我在项目中包含了FASTMM4:
program Project1;
uses
FastMM4,
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
FullDebugModeScanMemoryPoolBeforeEveryOperation := True;
SuppressMessageBoxes:=False; …Run Code Online (Sandbox Code Playgroud)