IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Libération des TFileStream


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    749
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 749
    Points : 500
    Points
    500
    Par défaut Libération des TFileStream
    bonjour

    Quelques conseils sur l'utilisation des TfileStream serait le bien venu !

    Ci-dessous une routine qui n'est utilisée que par un logiciel propriétaire et plusieurs fois durant son utilisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure chargement...
    begin
      fs_Mesure := TFileStream.Create(CheminUtilitaire+'Mesure.fsm', fmOpenRead);
      fs_Mesure.Position:=0;
      while (fs_Mesure.Position < fs_Mesure.Size) do fs_Mesure.Read(MesParam,sizeof(MesParam));
      FreeAndNil(fs_Mesure);
    end;
    mon problème vient du fait que de manière tout a fait aléatoire mais assez fréquemment j'ai une exception me disant que le fichier mesure.fsm est occupé par une autre processus et il n'y a aucune raison qu'une autre application y fasse appel.

    CE TfileStream est il bien libéré avec un freeAndNil ? est ce la bonne méthode de libération ... ou des idées sur le problème.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 764
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    Ci-dessous une routine qui n'est utilisée que par un logiciel propriétaire et plusieurs fois durant son utilisation.
    Est-ce que tu n'ouvres pas toi-même ce fichier en exclusif (fmShareExclusive) depuis un autre thread ?

    Citation Envoyé par petitcoucou31 Voir le message
    CE TfileStream est il bien libéré avec un freeAndNil ?
    C'est sûr que non s'il y a exception

    Mais même si ce fichier reste ouvert, il n'a pas de verrou, donc ne pose pas de problème.

  3. #3
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Tu peux utiliser un try ... finally.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure chargement...
    begin
      fs_Mesure := TFileStream.Create(CheminUtilitaire+'Mesure.fsm', fmOpenRead);
     
      try
        fs_Mesure.Position:=0;
     
        while (fs_Mesure.Position < fs_Mesure.Size) do 
          fs_Mesure.Read(MesParam,sizeof(MesParam));
      finally
        FreeAndNil(fs_Mesure);
      end;
    end;

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    749
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 749
    Points : 500
    Points
    500
    Par défaut
    salut

    Andnotor, j'ai scruté le code pour voir s'il y a d'autre appel via un autre thread et non.
    Chaque fois que ces "TFileStream" sont crées ils sont bien détruit, tous cela se passe en local sont simple à contrôler.

    tu dis " Mais même si ce fichier reste ouvert, il n'a pas de verrou, donc ne pose pas de problème.", pourtant mon exception est bien a la création du TFileStream avec le message decrit dans mon 1er post (occupé par une autre processus).

    retwas je vais tenter de mettre le gestionnaire d'erreur. mais cela ne réglera pas le probleme de fond.

    merci

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 487
    Points : 3 120
    Points
    3 120
    Par défaut
    Est-on sûr que la procédure est appelée une seule fois ?
    2 appels simultanés pourraient créer le problème.


    Sinon, en utilisant un TMemoryStream, ça devrait régler le problème puisque le fichier sera lu en une seule passe et mis en mémoire.
    Enfin, ça dépend de la taille du fichier bien sûr.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 764
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    pourtant mon exception est bien a la création du TFileStream avec le message decrit dans mon 1er post (occupé par une autre processus).
    Ce n'est qu'une conséquence et non la source du problème.

Discussions similaires

  1. suppression des donnees d'une table sans liberation de memoire
    Par kssillati dans le forum Administration
    Réponses: 3
    Dernier message: 06/09/2010, 18h53
  2. Réponses: 5
    Dernier message: 08/01/2009, 22h08
  3. Comment bien liberer des objets?
    Par Anonymouse dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/04/2008, 11h29
  4. [Image]Liberation des ressources
    Par Guybrush dans le forum Interfaces Graphiques en Java
    Réponses: 26
    Dernier message: 25/05/2007, 10h30
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo