Newsgroup: it.comp.lang.delphi
Titolo: Problema occupazione memoria

Sto litigando, come al solito, con Delphi. Il problema e' un programma che
occupa un sacco di memoria per compiere un'operazione tuto sommato banale,
ma che non riesco a fare in altro modo.
Il programma deve leggere MOLTE righe da una tabella Excel e sputarle su un
file di testo.
Per scrivere sul file uso un PChar, ma ho come l'impressione che per ogni
riga di testo il programma usi una nuova allocazione di memoria, senza
liberare la precedente. Dopo circa 100 righe mi ritrovo con il PC fermo, e
il programma che non arriva piu' a nessun breakpoint.
Esiste un modo per assicurarsi che la memoria utilizzata venga liberata?
--
Ing. Gabriele Boccone, O.Si S.n.c., Genova.
"L'utente piu' medio" dal sondaggio di it.hobby.motociclismo.scooter
       ,.                                                            \
   {}=/o ) on the left: Fender Jazz Bass - Made in Japan    _       =q\
  {}=/o,(  on the rigt: Kymco Heroism 150 - Made in Taiwan (_),==,    \\_
 {}=/o 坑  on my PC: Debian GNU/Linux 3.0 - Made somewhere   7,-.\   /,\.\
{}=/o <\|                                                    :=o ;===: o':
  (_____)  Powered by 220V                                    `-'     `-'

se posti un po di codice forse vein fuori qualcosa.
Bye
A.

 A.
Giusto...
Allora ecco l'estratto (scrittura di una riga):
    for IteCol := 1 to TotCol do begin
        ChrBuf := PChar(String(XLWS1.Cells.Item[IteRow, IteCol].Value));
        FldWid := Integer(XLWS1.Cells.Item[IteRow, IteCol].Width / 5);
        if FldWid <= Length(ChrBuf) then begin
            ChrBuf := PChar(LeftStr(ChrBuf, FldWid));
        end else for Spacing := Length(ChrBuf) to FldWid do begin
            ChrBuf := PChar(ChrBuf + ' ');
        end;
        Outfile.Write(ChrBuf^, Length(ChrBuf));
    end;
    Outfile.Write(#13 + #10, 2);
Devo avere righe di lunghezza fissa, formate da campi di lunghezza fissa,
quindi taglio la stringa se e' troppo lunga e aggiungo spazi se e' troppo
corta. La lunghezza della stringa e' data dalla dimensione della colonna in
Excel (esplicitamente richiesto da chi mi passa i files).
Rileggendolo penso che dovrei usare una String, e convertire in PChar solo
al momento della scrittura su file...

 Excel (esplicitamente richiesto da chi mi passa i files).
Usa ovunque String (facendo eventualmente dei typecast) e vivi felice... ;)
Ciao
Matteo

Prova ad usare TStringList
--
_________________________________
Edmondo Di Tucci 
snar...@tin.it
www.powernetsi.it
 
edm...@powernetsi.it

Mentre attraversavo il messaggio
news:am7jlq$3dgb6$
1...@ID-123015.news.dfncis.de
,
un giorno senza sole,
vidi Matteo Montanari pianger d'amore:

Nulla... Non va, anche cosi' comincia a mangiare la RAM come fossero
noccioline. Il typecast da String a PChar e' il nocciolo di tutto.
Il brutto e' che finche ci sono i breakpoint funziona tutto, e quando li
tolgo si incasina e si trascina dietro tutto il sistema operativo. Perche'
mai se seguo passo per passo l'esecuzione funziona perfettamente e se lo
lascio andare si pianta?
Perche' non posso scrivere direttamente una String su un TFileStream?

 ha scritto nel messaggio
news:h__h9.9779$Av4.1...@twister2.libero.it...

Outfile.write(stringa[1],length(stringa));
Matteo