-1

TAmazonConnectionInfo および TAmazonStorageService Demo を使用して、Amazon AWS S3 に接続しようとしています。接続は完全に機能します。バケットの一覧表示、バケット ファイルの一覧表示、ファイルのダウンロードとアップロードを行うことができます....しかし、EureakLog は AWS S3 デモでメモリ リークを報告します。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;
4

1 に答える 1

4
s3Service := nil;
s3Service.Free;

これらの行は逆です。最初の行が漏れます。参照が であるため、2 番目は何もしませんnil。これらの行の順序を逆にするだけです。

s3Service.Free;
s3Service := nil;

またはFreeAndNil

FreeAndNil(s3Service);

または、電話してくださいFree

s3Service.Free;

への参照の設定について心配する必要はありませんnil

于 2014-11-08T15:03:00.287 に答える