Newsgroup: it.comp.lang.visual-basic
Titolo: Ciclo array stringhe :(

Ho un array di stringhe con circa 30000 elementi e una funzione in cui ciclo
tale array per recuperare le stringhe modificarle con replace e valorizzare
un array di tipi col risultato.
Perchè il tempo di esecuzione è estremamente lento ? E perchè la memoria di
sistema scoppia ?
Forse è la funzione Replace ???
Qualcuno conosce un sito dove recuperare qualche tecnica di manipolazione di
stringhe ???
Grazie a tutti :)

 Grazie a tutti :)
Di gniente (scritto apposta).
-- 
Quando noi ignoranti eravamo di piů,
tutto era piů bello...
(A. Celentano)

 (A. Celentano)
Ciao, scusa per l'attesa...
ecco i cicli in questione, purtroppo sono 2 cicli innestati quindi se gli
elementi dell'array sono 30.000 il numero totale di iterazioni è
900.000.000, vorrei poter ottimizzare il tutto considerando che il codice mi
è stato dato così e per ovviare a questo ciclo dovrei completamente
modificare il programma.
    nStar = 30000
    For i = 0 To nStar
        DoEvents
        With TabMyType(i)
            c = 0
            ReDim Static(nStar)
            For j = 0 To nStar
                DoEvents
                .Static(c).a = Texts(j)
                .Static(c).b = Replace(Texts(j), " ", "_") & ".bak"
                c = c + 1
                DoEvents
            Next j
            DoEvents
        End With
    Next i
L'array TabMyType contiene già 30.000 e ognuno di questi 30.000 contiene
un'array di altri 30.000...anche l'array Texts contiene, o mio dio, 30.000
elementi, a questo punto io credo sia un problema di memoria, perchè facendo
così si costringe VB a cercare l'elemento corrente in tre arrays diversi !!!
è semplicemente una follia però io confido nella mia buona stella !!!

 è semplicemente una follia però io confido nella mia buona stella !!!
Beh se i dati devono proprio essere tanti, dalli in pasto a Access e 
mandagli qualche bella query di aggiornamento...


 ha scritto
nel messaggio news:3o7Qc.27903$1V3.6...@twister2.libero.it...

La c serviva nel ciclo originale perchè facevo un controllo in piu' tipo "if
i <> j", poi ho dimenticato di cambiare c con j per la fretta ma per
spiegare il problema è inutile tale precisazione.
Quello in questione è un programma per la gestione di file. Con questi array
recupero i nomi dei file poi in un'altra funzione vengono rinominati,
spiegarti tutto sarebbe lunga. Io comunque ero interessato ad ottimizzare il
ciclo, volendo evitare la riscrittura di buona parte del codice, perchè se
devo usare un'altra tecnica non ho problemi a parte il tempo.
Il programma era stato progettato per gestire poche centinaia di file ma ora
si è presentata la necessità di processare una quantità di dati nettamente
superiore ed io devo modificarlo per andare incontro a tale richiesta.
Grazie comunque...

E' difficile aiutarti non sapendo esattamente lo scopo di quella 
struttura dati, del perchč esistano dei vettori di vettori (se cosě 
posso chiamarli) ognuno con 30.000 elementi...
Se magari mi spieghi (anche in pvt) cosa fa il programma io posso darti 
una mano e magari stravolgerti un po' quel codice...
Per mandarmi una mail in pvt cancella dal mio indirizzo come indicato :)
-- 


 ha scritto
nel messaggio news:EocQc.28388$1V3.6...@twister2.libero.it...

Ormai ho risolto, ho modificato la filosofia del programma...
Il problema era la memoria, cioč, caricando 30.000 parole (in media di 10
caratteri) per 30.000 volte in un array di array, il sistema č costretto a
tenere in memoria una grossa quantitŕ di dati che deve scorrere di volta in
volta per trovare questo o quell'elemento. Considerando che ho 512 MB di ram
di cui la metŕ č utilizzata da programmi e sistema operativo, in 70-80
passaggi riempivo tutta la memoria disponibile...in pratica creavo un
mostro.
Io ho lasciato invariato il "ciclo nel ciclo" ma ora non esiste piů un array
di 30.000 per ogni elemento...i tempi sono sempre quelli ma il programma č
decisamente fluido e la memoria rimane libera :).
Grazie comunque per il tuo aiuto, ciao !!!