Quelque chose m'échappe...

sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 15 juil. 2013 à 15:18
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 15 juil. 2013 à 17:48
Bonjour,

Je m'essaie au transfert de fichier via DataSnap.

Côté serveur j'ai ça (en plus du ReportMemoryLeaksOnShutDown activé sur le FormCreate):
function TServerMethods1.getFile(psFileName: string): TMemoryStream;
begin
     Result := TMemoryStream.Create;
     Result.LoadFromFile(psFileName);
end;


Sur mon client :
procedure TFMain.btn_getClick(Sender: TObject);
var
   lServeur   : TServerMethods1Client;
   lMemStream : TMemoryStream;
begin
     lServeur   := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
     lMemStream := TMemoryStream.Create;
     lMemStream.LoadFromStream(lServeur.getFile('D:\Test.txt'));
     lMemStream.SaveToFile('D:\Test2.txt');
     lMemStream.Free;
     lServeur.Free;
     Application.ProcessMessages;
end;


Je m'attendais à une belle fuite mémoire côté serveur, vu que je crée un TMemoryStream que je ne libère pas, mais non, aucun message de Delphi... Est-ce que c'est parce que le retour de la fonction est "évacué" du programme ? Ou est-ce qu'il y a bien une fuite que Delphi ne repère pas ? (ou pour tout autre raison)

Simon

4 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 juil. 2013 à 16:56
Salut,

effectivement à la lecture du code je vois aussi de belles fuites en perspective !!!

et que se passe t-il si coté client tu fais ceci ?

procedure TFMain.btn_getClick(Sender: TObject);
var
   lServeur   : TServerMethods1Client;
   lMemStream : TMemoryStream;
begin
     lServeur   := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
     lMemStream := lServeur.getFile('D:\Test.txt');
     lMemStream.SaveToFile('D:\Test2.txt');
     lMemStream.Free;
     lServeur.Free;
     Application.ProcessMessages;
end;



une violation d'accès ? ou pas




[hr]@+Cirec
[hr]
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
15 juil. 2013 à 17:20
non, pas du tout, ça fonctionne nickel...

Simon
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
15 juil. 2013 à 17:23
oups, pardon Cirec, je n'avais pas vu que tu avais modifié mon code client...

Simon
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
15 juil. 2013 à 17:48
Ouaip, violation d'accès sur le savetofile. Encore plus bizarre, juste avant le savetofile, le lmemstream.size vaut 48... et lmemstream <> nil

Simon
0