我们正尝试使用TAmazonConnectionInfo和TAmazonStorageService Demo与Amazon AWS S3建立连接。连接完美。我们可以列出存储桶,列出存储桶文件以及下载和上传文件....但是EureakLog使用AWS S3 Demo报告内存泄漏。 Marko Cantu的原始演示在FormCreate中创建了TAmazonStorageService,但没有在FormDestroy中处理TAmazonStorageService。
在观察到内存泄漏后,我们将TAmazonStorageService设置为nil,然后在FormDestroy中释放它,但EurekaLog仍报告内存泄漏并指向 s3Service:= TAmazonStorageService.Create(AmazonConnectionInfo1);
这里有什么不对吗?是否必须处理其他事项以防止内存泄漏?
procedure TS3ClientForm.FormCreate(Sender: TObject);
begin
AmazonConnectionInfo1.AccountName := 'XXXXXXXXXXXXXXXXXXXXXX';
AmazonConnectionInfo1.AccountKey := 'KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK';
Caption := AmazonConnectionInfo1.StorageEndpoint;
{ Create an s3Service }
s3Service := TAmazonStorageService.Create(AmazonConnectionInfo1);
end;
procedure TS3ClientForm.FormDestroy(Sender: TObject);
begin
{ Free the s3Service }
s3Service := nil;
s3Service.Free;
end;
答案 0 :(得分:4)
s3Service := nil;
s3Service.Free;
这些线路是错误的。第一线泄漏。第二个没有做任何事,因为引用是nil
。只需颠倒这些行的顺序即可。
s3Service.Free;
s3Service := nil;
或使用FreeAndNil
,
FreeAndNil(s3Service);
或者只是致电Free
,
s3Service.Free;
并且不必担心设置对nil
的引用。