Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [java] meglio stringa o file?

    Ciao a tutti,

    ho una domanda forse stupida ma non riesco a trovare una soluzione ne` cercando sul forum ne` su google.
    Devo lavorare con stringhe lunghe circa 1 milione di caratteri in un programma java.
    Lavorare su stringhe vuol dire che ho bisogno di modificarle, magari aggiungendo parti o togliendone 3 o 4 volte durante l'esecuzione del programma.
    A livello di efficienza (performance del programma), e` meglio lavorare su una stringa cosi` lunga o mettere tutto in un file e lavorare su quello?
    Detta altrimenti, cosa devo considerare per scegliere se creare una stringa lunghissima o se salvarmi tutto su un file? il numero di caratteri?il numero di volte che accedo alla stringa o che la modifico?

    Grazie
    Marco
    Quanti programmatori sono necessari per cambiare una lampadina?
    Nessuno, e' un problema hardware.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Ciao, penso che la soluzione miglore "a priori" non ci sia.
    Che tipo di controlli devi fare sul file/stringhe? Se decidi di usare i file, sei sicuro di non essere costretto a leggerlo tutto e metterlo in memoria? Quanta memoria hai a disposizione?
    Insomma, fai dei test, prova un po' tutto e vedi cosa ti ispira di più

  3. #3
    Grazie mille della risposta!

    Provo a scrivere un po' di dettagli in piu` che magari aiutano.

    Ho scritto una classe java in cui sono presenti 3 variabili che devono contenere circa un milione di caratteri l'una.
    queste 3 sono funzioni l'una dell'altra quindi per generare la variabile 2 devo leggermi tutta la prima variabile e stessa cosa per la 3.

    Quindi per rispondere alla tua domanda: si`, se scelgo di salvare queste variabili in file devo leggere due di questi file almeno una volta per tutta la loro lunghezza. Ma una volta fatto posso liberare la memoria, lasciarli li` e non toccarli mai piu` visto che l'unico loro utilizzo sara` quello di essere dati in pasto ad un altro software (in particolare un smt-solver).

    Il prioblema principale e` che di queste classi dovro` crearne mediamente circa 50 istanze quindi pensavo che creare cosi` tante variabili di tipo String cosi` lunghe potesse far "morire" un pc che fa girare questo software. (considerando che questo software dovrebbe essere usato da un pc di fascia media/medio-alta come il mio i7 con 8 giga di ram).

    Se non esistessero "metriche" per decidere come comportarsi in questi casi, potrei creare due versioni del programma e utilizzare dei benchmark per capire come e` meglio agire, ma speravo in un oracolo :P

    Ciao,
    Marco
    Quanti programmatori sono necessari per cambiare una lampadina?
    Nessuno, e' un problema hardware.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Ok, mi sembra di capire quindi che ogni file puoi leggerlo in modo sequenziale (java nio può aiutare) per creare il successivo... l'uso di stringhe probabilmente ti porta ad uccidere il pc (tenendo presente poi la gestione dello string pool...), mi sa che con i file conviene.
    In ogni caso, se non ti costa troppo, l'idea migliore mi sembra sempre quella di creare due versioni diverse e testarle

  5. #5
    Perfetto, allora faro` i test e pubblichero` i risultati mettendo poi "SOLVED" alla discussione.
    Grazie ancora dell'interessamento e delle utili risposte.

    Ciao,
    Marco
    Quanti programmatori sono necessari per cambiare una lampadina?
    Nessuno, e' un problema hardware.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,305
    Oddio... tenendo presente che un oggetto String di 1.000.000 di caratteri occupa in memoria poco meno di 1 MB... e devi lavorare con sole 3 stringhe... saranno anche 50 istanze, ma sono meno di 150 MB di ram... NetBeans da solo ne porta via non meno di 500.

    PS: non è usanza del forum aggiungere i tag SOLVED.. semplicemente la discussione va a morire da sola.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.