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

C Discussion :

Ecriture fichier binaire et vitesse


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Ecriture fichier binaire et vitesse
    Bonjour,

    J'ecrit de gros fichiers binaires (qq 10GO) avec les fonctions classique fopen, fwrite...
    J'ai remarqué un gros gain en vitesse significatif (30%°, en augmentant la taille du buffer en utilisant la fonction
    setvbuf(f,NULL,_IOFBF,262144)

    Comment ajuster la taille du buffer, y a t-il une limite, et quel est le risque.

    merci de vos suggestions

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Mes connaissances ne sont pas parfaites sur le sujet, donc il est possible que je me trompe ou que j'ignore certains aspect du problème.

    Le principe du buffer est de diminuer les accès au disque en stockant les données à écrire dans le buffer et à les écrire quand le buffer est plein.

    Ainsi si on veut écrire 20 octets, au lieu d'accéder 20 fois au disque pour écrire à chaque fois 1 seul octet, on y accède une seule fois pour écrire 20 octets.

    Il faut aussi savoir que l'ordinateur ne sait pas écrire (et lire) un seul octet sur le disque (?), il va réécrire tout le secteur qui peut faire 512kio par exemple.

    La taille optimale de buffer est donc, je pense, la taille d'un secteur du disque lu (?). Pour la limite, il y en a obligatoirement une, mais je pense qu'elle est suffisamment grande pour qu'on ai pas à s'en soucier. Après, si la taille du buffer est supérieur à la taille d'un secteur (?) on ne gagnera rien.

    Le seul risque que je verrais c'est de perdre en performances lors de la lecture ou le gaspillage de mémoire.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Le seul risque que je verrais c'est de perdre en performances lors de la lecture ou le gaspillage de mémoire.
    Si l'on veut vraiment chipoter, on peut ajouter le fait que plus de données risquent d'être perdues en cas de crash de la machine ou de plantage du programme. 262144 octets, ça fait quand même 256 Kio.

    Cela dit, c'est difficile de mesurer cela car il faut les mettre en balance avec les mémoire cache utilisées par le système d'exploitation ainsi que par le disque dur lui-même. Donc, c'est au cas par cas, et en examinant également ce que fait le programme.

  4. #4
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci de vos remarques.
    Effectivement ca dépend bien systeme. Aucun effet observé sur Linux à contrario de windows.

  5. #5
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Lors de la lecture de ton fichier avec fread et l'écriture avec fwrite...
    Le seul conseil précis et supplémentaire (les précédents sont déjà très bons) :
    Evite d'avoir un buffer malloqué/free tout le temps !

    Garde bien un "char buf[BUF_LEN]" en variable qui sera du coup alloué en "dur" dans l'exécutable, et t'évitera de faire trop d'appels à malloc... (c'est la méthode qui était utilisée il y a très très très longtemps pour les traitements répétitifs).
    Si tu fais un seul malloc au tout début, c'est pas gênant.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    peux-tu etre plus explicite à propos de ton buffer de char. Pour ma part je lis des doubles

Discussions similaires

  1. Ecriture fichier binaire
    Par Thedahu dans le forum Général Python
    Réponses: 9
    Dernier message: 10/06/2013, 14h46
  2. Lecture et ecriture fichier binaire
    Par gedonet dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/04/2009, 19h51
  3. lecture ecriture fichier binaire
    Par jonckers dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/04/2007, 09h12
  4. Ecriture fichier binaire : Format TIFF
    Par xChRiSx dans le forum C++
    Réponses: 2
    Dernier message: 12/04/2007, 18h39
  5. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30

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