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

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