Newsgroup: it.comp.lang.delphi
Titolo: Programma in delphi su Win98 non va, su Win2000 invece si.

Ho cercato di riassumere il problema nel subject, comunque illustro in
breve:
Ho creato un programmino che legge un file di Excel, ne estrae i dati e li
mette in righe di un file di testo. Questo programma funziona finche' il
file e' "piccolo" (100-200 righe), poi comincia a occupare troppe risorse, e
fa bloccare il sistema operativo.
Per avere piu' controllo sul "fenomeno" ho ricompilato il tutto sotto
Windows 2000, ma *stranamente*, non si verifica piu' il problema.
Quasi sicuramente dipende dall'interazione con Excel, ma sembra quasi un
problema di "garbage collection", per cui il programma tende a espandersi "a
palloncino" nella memoria. Non avevo dubbi che la memoria fosse gestita
meglio in Windows 2000 che in Win 98, ma c'e' un sistema per aggirare
l'ostacolo? I files "significativi" per la mia applicazione sono di
2000-3000 righe.

Che Winsozz98 soffra di problemi ormonali è risaputo. ;))
molto pero dipende anche dal codice che fa il trasferimento.
Puoi postare qualcosina?
Bye
A.

"Alberto Salvati" <x@x.x from office> ha scritto nel messaggio
news:anbm6a$ll6$1...@newsreader1.mclink.it...

Era la risposta che mi aspettavo... :-)
Eccovi un po' di codice (con commenti in fondo)
        OutFile := TFileStream.Create(Filename, fmOpenReadWrite);
        OutFile.Seek (0,soFromEnd);
        for IteCol := 1 to TotCol do
                if IteCol <> ExcCol then begin
                        StrBuf := String(XLWS1.Cells.Item[IteRow,
IteCol].Value);
                        FldWid := Integer(XLWS1.Cells.Item[IteRow,
IteCol].Width / 5);
                        if FldWid <= Length(StrBuf) then begin
                                StrBuf := LeftStr(StrBuf, FldWid);
                        end else for Spacing := Length(StrBuf) to FldWid do
begin
                                StrBuf := StrBuf + ' ';
                        end;
//              ChrBuf := PChar (StrBuf);
                Outfile.Write(StrBuf[1], FldWid);
        end;
        Outfile.Write(#13 + #10, 2);
        Outfile.Free;
- Apro e chiudo il file di output (invece di lasciarlo aperto) perche' non
mi importano le prestazioni, perche' all'inizio pensavo che il problema
fosse causato dalla scritura su file che non faceva mai un "flush", e
perche' voglio vedere, dopo il riavvio, quante righe sono state scritte.
- La dimensione del campo di testo e' data dalla dimensione della colonna,
approssimativamente divisa per 5 (sarebbe piu' vicino a 5,4 ma preferisco
avere qualche spazio in piu' piuttosto che tagliare il testo).
- Gia' provato tutto questo con PChar al posto di una String, e pensavo che
il problema fosse quello, ma non era cosi' semplice.
- Il codice riportato e' isolato all'interno di una procedura, quindi credo
che tutti i puntatori siano a posto dopo il ritorno. L'unica cosa che resta
aperta e' il foglio Excel da cui leggo.

 Windows 2000, ma *stranamente*, non si verifica piu' il problema.
Nuovo aggiornamento sul problema (e rinnovo la richiesta di aiuto, il codice
non e' cambiato):
Ho installato VMWare su Win 2000, e ci faccio girare Windows 98 dentro, con
il debug remoto (o anche senza debug). In questo caso il programma funziona
senza problemi.
Anche su Win98 "semplice" se il programma gira in debug non succede nulla
finche' non tolgo i breakpoint.
Ho quasi il dubbio che basti "rallentare" l'esecuzione, e la memoria torna
disponibile... ma possibile che in Windows 98 la gestione della memoria
faccia cosi' schifo.
Attendo fiducioso...