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

MFC Discussion :

Conseils sur les fonctions d'écriture de fichiers


Sujet :

MFC

Vue hybride

zoylamb Conseils sur les fonctions... 08/02/2008, 08h09
farscape salut , je ne suis pas... 08/02/2008, 08h51
zoylamb Merci à toi pour tes réponses... 08/02/2008, 10h16
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut Conseils sur les fonctions d'écriture de fichiers
    Bonjour à tous,

    Je cherche conseil sur les fonctions d'écriture de fichiers. Je developpe une application qui doit écrire des fichiers à 500 Mo/s (station bien dimensionnée bien sur ^^). j'alloue préalablement un tableau de données en mémoire que qui me sert ensuite pour nourrir les fonctions d'écriture.

    J'ai réalisé quelques tests pour évaluer les performances d'écritures des fonctions que je connais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    CFile file(str,CFile::modeCreate | CFile::modeWrite);
    file.Write(Buffer,taille);
    file.Close();
     
    HANDLE hFile = CreateFile(str2, GENERIC_ALL,0,0,CREATE_ALWAYS,FILE_FLAG_WRITE_THROUGH,0);
     
    WriteFile(hFile,Buffer,taille,&dwBytesWritten,&o);
    CloseHandle(hFile);
     
    std::ofstream File(str2,ios.binary);
    File.write((char*) Buffer,taille);
    File.close();
     
    FILE* f;
    fopen_s(&f,str3.GetBuffer(),"w");
    fwrite(Buffer,1,taille,f);
    fclose(f);
     
    CStdioFile file2(str2,CStdioFile::modeCreate | CStdioFile::modeWrite);
    file2.Write(Buffer,taille);
    file2.Close();
    Et globalement, seules les 2 premières méthodes semblent donner des résultats convenables. Je suis assez surpris de la performance médiocre de la fonction C qui devrait être la plus rapide...

    Est-ce que certains d'entre vous voient d'autres méthodes, des astuces ou des erreurs dans mon code pour augmenter la vitesse d'écriture?

    Merci d'avance.
    Pense a mettre la balise code, Merci Farscape

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut ,
    je ne suis pas surpris des résultats:
    CFile est pour moi le meilleur compromis entre rapidité et simplicité d'usage.
    CFile utilise directement Writefile d'où les performances égales .

    pour la fonction c je pense que tu devrais essayer la fonction sans flux _open
    pour pouvoir comparer ..
    les performances devrait être égales à celle de CFile.
    pour les flux (fopen_ et CStdioFile) il faudrait peut être voir la bufferisation avec setvbuf .
    enfin en dernier je placerai ofstream en terme de vitesse...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Merci à toi pour tes réponses toujours aussi rapide et clair
    Comme tu me l'as conseillé j'ai tester les fonctions _open/_write
    et j'obtient un léger gain en terme de rapidité ... ~2% (mais j'en suis à grapiller des ms ^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int F;
    _sopen_s(&F,"f:\\test31.bin",_O_CREAT|_O_WRONLY |_O_BINARY,_SH_DENYNO,_S_IREAD | _S_IWRITE );
     
    _write(F,Buffer,taille);
     
    _close(F);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/08/2014, 15h57
  2. Langage C : fichier d'aide sur les fonctions
    Par larnicebafteur dans le forum C
    Réponses: 6
    Dernier message: 09/04/2007, 15h01
  3. doc sur les fonctions
    Par masterfab dans le forum C
    Réponses: 18
    Dernier message: 23/06/2005, 17h55
  4. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00

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