Newsgroup: it.comp.lang.delphi
Titolo: Memoria statica e dinamica

Qualcuno può chiarirmi le idee...
Devo gestire delle griglie di stringhe.. diciamo 2000x100 elementi per
un totale di 200.000 stringhe (255 caratteri).
Effettuando il conteggio con i dati che mi sono stati forniti nel post
precedente, poichè una stringa occupa uno spazio in memoria di 1byte
per carattere.
200.000 x 255 byte  più o meno 50 MB di memoria....
OK, però la maggior parte delle stringhe considerate sono nulle,  se
io utilizzassi una stringgrid, questa allocherebbe tutti i 50 MB o
gestirebbe la memoria in modo dinamico.
In definitiva qual'è la differenza tra un array e una stringgrid come
utilizzo di memoria ?
Grazie Ambro

un totale di 200.000 stringhe (255 caratteri).
Non serve a nulla caricare a video 200.000 stringhe, nessuno troverà
mai un'utilità nello scorrere un numero così grande di informazioni. 
Se hai bisogno di elaborare una tale mole di dati, caricala
parzialmente in memoria facendo uso di TStringList o leggila
direttamente da qualche supporto. Specifica meglio che cosa hai
bisogno di fare.

ale.am...@gmail.com
 ha scritto:

Quelli della Borland sanno il fatto loro: le stringhe sono allocate solo
per i caratteri effettivamente utilizzati.
Quindi, se non dici nulla al compilatore, stai usando stringhe Ansi
(almeno in Delphi 6 e 7) che per ogni variabile stringa richiedono 4
byte (il puntatore) più un byte per ogni carattere memorizzato; se usi
le ShortString (quelle di Delphi 1/TurboPascal), cosa che non credo
altrimenti la questione ti sarebbe più chiara, queste richiedono un byte
per la lunghezza più un byte per carattere (max 255).
Quindi, se allochi 200.000 stringhe vuote, al massimo ti servono 800kbyte.
Ciao.

> Quelli della Borland sanno il fatto loro......Quindi, se allochi 200.000 stringhe vuote, al massimo ti servono 800kbyte.
Una bellissima notizia, grazie

 bisogno di fare.
Ok, spero di avere capito il concetto usare TopRow e LeftCol per
caricare un'array associato ??
Tento di spiegare meglio: Ho stringgrid1 è 100x1000.
Se associo un array 100x1000 come risparmio memoria, non è la stessa
cosa mantenere i dati nella stringgrid ?
Ciao e grazie... Ambro79

 cosa mantenere i dati nella stringgrid ?
Il problema è a che cosa ti serve caricare tutti quei dati in memoria.
Elaborali a pacchetti, in fasi separate.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Elaborali a pacchetti, in fasi separate.
Mi spiego malissimo chiedo scusa...
La facciata principale dell'applicazione è costituita da una
StringGrid diciamo 3000 x 100 usata come INPUT dati da parte
dell'utente.
Statisticamente l'utente riempirà la stringgrid solo nelle prime
colonne e non tutta diciamo circa 20.000 stringhe sparse qua e là.
non capisco due cose:
- Se uso un array associato e lo carico a seconda della parte di
stringgrid visualizzata a schermo uso la stessa quantità di memoria ?
- Se uso più file su disco di appoggio alla griglia opportunamente
caricati e salvati riduco la quantità di memoria usata giusto ? Ma il
caricamento dei dati da disco non crea un peggior refresh della
griglia stessa ?
Cosa mi consigli e infine la memoria usata per 20.000 stringhe è
accettabile o no ?
Ciao

 dell'utente.
Perchè non usare un bel CDS ?? Lavora in memoria, e' veloce, persiste i
dati e non devi scrivere codice... 
In altre parole ti semplifica la gestione dei dati.
Ammesso che tu riesca a farci capire il contesto preciso di applicazione:
non riesco ad immaginare quale essere umano si metta davanti ad una griglia
3000 x 100.... e riempia 20mila campi..
-- 
Morde

 3000 x 100.... e riempia 20mila campi..
In realtà i campi vengono importati dal DB a 10 per volta e generati
parzialmente in modo automatico.
E' un sistema di gestione del magazzino molto particolare...
Grazie, ciao