EurekaLog报告TAmazonStorageService内存泄漏甚至是免费的

时间:2014-11-08 14:43:18

标签: delphi memory-leaks amazon-s3 delphi-xe7

我们正尝试使用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;

1 个答案:

答案 0 :(得分:4)

s3Service := nil;
s3Service.Free;

这些线路是错误的。第一线泄漏。第二个没有做任何事,因为引用是nil。只需颠倒这些行的顺序即可。

s3Service.Free;
s3Service := nil;

或使用FreeAndNil

FreeAndNil(s3Service);

或者只是致电Free

s3Service.Free;

并且不必担心设置对nil的引用。