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 :

chargement de gros fichier


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Points : 41
    Points
    41
    Par défaut chargement de gros fichier
    Bonjours, depuis quelque jour je me pose la question suivante : Comment faire pour charger en mémoire des fichier dont la taile est importante ( ex: 10 Go ).

    Est-ce que cela a un lien avec la mapping de fichier ?

    merci

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Si t'as pas 10 go de mémoire (sur un pc c'est rare, après sur les servers je dis pas) tu pourras pas. Enfin tu peux pas charger la totalité en tout cas. Il te faudra juste charger une petite partie, puis passez à une autre quand t'as finis tes traitements etc
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    ???

    Ben normalement comme pour n'importe quel fichier...
    Les fonctions de traitement de fichier depuis une petite vingtaine d'années utilisent des int64 pour gérer la position...

    Après pour le charger entièrement en mémoire addressable, reste a avoir 10Go addressable, donc un OS 64 bits.... Par contre, pas besoin d'avoir physiquement 10Go bien entendu.

    Pour l'avoir entièrement en mémoire, il faut non seulement un OS 64 bits, mais + de 10Go de RAM.

    Maintenant.... déjà que pour un fichier de plusieurs centaines de Mo, dans 99% des cas on n'a jamais besoin de l'avoir entièrement en mémoire, je vois mal pourquoi tu voudrais faire ça.... Si tu commencais par là ? Nous dire ce que tu veux faire ?

    A noter que le mapping de fichier est la méthode d'IO (pour les gros fichiers en tout cas) la plus efficace. Et tu peux mapper 128Mo du fichier à (presque) n'importe quel endroit, et modifier cet endroit à la volée...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par nicroman Voir le message
    ???
    Par contre, pas besoin d'avoir physiquement 10Go bien entendu.

    Pour l'avoir entièrement en mémoire, il faut non seulement un OS 64 bits, mais + de 10Go de RAM.
    C'est quand même un peu contradictoire ...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    Comment faire pour charger en mémoire des fichier dont la taile est importante ( ex: 10 Go ).
    Sur les machines actuelles, et pour quelques années encore, la réponse est "vaut mieux pas".

    Si tu veux absolument, il te faut effectivement un OS qui te permet d'adresser 10Go de mémoire, soit un OS 64 bits (en 32 tu buteras sur une limite quelquepart entre 2 et 4 Go...). Et ensuite c'est comme un fichier plus petit (faut juste te rappeler de ne pas utiliser d'entiers pour stocker des positions, sinon ca marchera pas).

    Mais en général, on travaille sur de tels fichiers "par petits bouts": on se déplace dedans (avec des seekg()) et on en lit des bouts en mémoire (avec des read()). Idéalement, il faut avoir (ou construire au démarrage à partir d'une lecture séquentielle) une sorte de "dictionnaire" qui te dit où chaque chose se trouve, et sert à "diriger" des seekg.

    Sur de gros fichiers, il est également utile de bien choisir (éventuellement de retravailler) le format de tes données. En particulier, il vaut mieux, toujours, travailler en mode binaire, et lire un nombre fixe d'octets à chaque appel (plutôt que faire des getlines et autres appels qui testent chaque lecture), il est également utile que les données dont on a besoin en meme temps se trouvent à peu près au même endroit dans le fichier (sinon, la lecture depuis le disque va prendre un temps fou).

    Citation Envoyé par spiner900 Voir le message
    Est-ce que cela a un lien avec la mapping de fichier ?
    Pas tout à fait. Le mapping mémoire est une méthode bas niveau pour la lecture de fichiers de taille moyenne. En gros, cela permet d'accéder plus vite et plus simplement (comme un bête pointeur) aux données d'un fichier.

    Ca marche très bien sur des fichiers (locaux) assez gros (de qq Mo à quelques centaines de Mo sur les machines usuelles). Sur de petits fichiers, ca ne gagne pas vraiment de temps. Sur des gros, ou très gros (disons 500 Mo ou plus), les créations de mapping peuvent échouer, en fonction de l'état de la mémoire libre.

    Francois

    , mais pas sur les fichiers très gros,

Discussions similaires

  1. [MySQL-5.6] Chargement en base de gros fichiers
    Par LaGirafeVerte dans le forum Administration
    Réponses: 1
    Dernier message: 12/01/2014, 11h45
  2. Chargement d'un gros fichier
    Par tomy29 dans le forum Hibernate
    Réponses: 1
    Dernier message: 03/10/2008, 15h39
  3. Chargement d'un gros fichier
    Par tomy29 dans le forum JSF
    Réponses: 3
    Dernier message: 03/10/2008, 15h32
  4. Chargement de gros fichiers
    Par Maveric78f dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 21/08/2008, 12h00
  5. Réponses: 1
    Dernier message: 26/02/2007, 21h47

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