Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1

    [C/C++] Leggere un file più velocemente

    Salve a tutti!

    Ragazzi, dovrei leggere una matrice da un file di testo in modo più efficiente possibile.
    Purtroppo la classe fstream è parecchio lenta, sapreste suggerirmi un metodo più veloce?

    Grazie!


    Allego il codice che ho utilizzato (semplice e niente di artificioso)



    bool** M = new bool*[b];

    for(int i=0; i<b; i++)
    M[i] = new bool[b]; // b è la dimensione della matrice

    ifstream file("file.txt");

    for(int i=0; i<b; i++)
    for(int j=0; j<b; j++)
    file >> M[i][j];
    The Happyest Times
    Are The Ones
    That Are Shared

  2. #2

    Re: [C/C++] Leggere un file più velocemente

    Originariamente inviato da Nebula88
    Purtroppo la classe fstream è parecchio lenta,
    Parecchia lenta rispetto a cosa?
    Quanto e' grande la tua matrice (che sembra essere quadrata)?
    Stai compilando in modalità debug o deployment (release)?
    Hai provato ad utilizzare un profiler?
    Chi ti dice che la "lentezza" del tuo programma non sia dovuta ad altri fattori? (ad esempio disco lento danneggiato ultra frammentato.. che sistema operativo usi?)

  3. #3
    Ciao!

    In pratica si tratta di un progetto per l'università, ovvero la risoluzione di un labirinto dato tramite un file.

    Ho utilizzato un opzione di CodeBlocks che mi permette di calcolare il tempo di esecuzione di ogni singola funzione del mio programma, e risulta che la lettura del file impiega circa il 70% del tempo totale.

    E' per questo che chiedo se esiste qualche metodo alternativo..



    P.s. Scusa l'ignoranza, ma non so cosa sia un profiler e tantomeno cosa cambi tra le due modalità di compilazione..
    The Happyest Times
    Are The Ones
    That Are Shared

  4. #4
    Debug --> Il compilatore aggiunge dell informazioni riguardo all'eseguibile, per facilitare il debug.
    Release --> Il compilatore non aggiunge niente.

    Profiler, MacApp cos'è ?

    Se vuoi leggere velocemente da file, ci sarebbe l'automa a stati finiti

  5. #5

  6. #6
    Originariamente inviato da menphisx

    Se vuoi leggere velocemente da file, ci sarebbe l'automa a stati finiti
    Si tratta del post che c'è in questo forum vero?
    L'ho letto un po' ma mi sembra un tantino complicato...
    Mi aiuteresti nella comprensione?..
    The Happyest Times
    Are The Ones
    That Are Shared

  7. #7
    E poi,..
    mi sembra di aver notato che la classe fstream non copi il file nella RAM ma acceda ogni volta all'hard disk!

    Questo non rende molto più lenta la lettura?!..
    The Happyest Times
    Are The Ones
    That Are Shared

  8. #8
    Originariamente inviato da Nebula88
    Si tratta del post che c'è in questo forum vero?
    L'ho letto un po' ma mi sembra un tantino complicato...
    Mi aiuteresti nella comprensione?..
    Puoi vedere questo esempio:

    http://forum.html.it/forum/showthrea...=&pagenumber=1

  9. #9
    Originariamente inviato da Nebula88
    E poi,..
    mi sembra di aver notato che la classe fstream non copi il file nella RAM ma acceda ogni volta all'hard disk!

    Questo non rende molto più lenta la lettura?!..
    No, la fstream fornisce accesso bufferizzato ai file, per cui dovrebbe essere relativamente veloce. Se vuoi un buon compromesso tra la comodità della classe fstream e la velocità dell'automa a stati finiti usa la libreria di IO del C (fopen, fscanf, fclose); in ogni caso, quanto tempo ci mette il tuo programma a caricare i dati dal file?
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Buone Nuove!
    Ho trovato un metodo che mi permette di risparmiare un sacco di tempo..
    In pratica, carico il file di in una volta in un array di caratteri:

    int length;
    char* buffer;

    ifstream is("nomefile");

    is.seekg (0, ios::end);
    length = is.tellg();
    is.seekg (0, ios::beg);

    buffer = new char [length];

    is.read (buffer,length);
    is.close();
    Tutta via, copia nell'array anche gli spazi (che a me non servono) ed altri caratteri strani (incluso lo /n), sapreste dirmi come omettere la copia?!..
    The Happyest Times
    Are The Ones
    That Are Shared

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.