Newsgroup: it.comp.lang.visual-basic
Titolo: Il comando printer.prin usa memoria che non viene rilasciata

Salve a tutto il ng.
Sto utilizzando VB 60 con SP3.
Ho un programma VB che genera una grande quantità di file che poi stampa
usando il comando printer.print e printer.enddoc.
Dopo circa 16000 file il systema si pianta .
Ho fatto un programmino di test che non fa altro che stampare 70 righe con
il comando printer.print e poi chiude il documento con printer.enddoc, se
per esempio il ciclo lo eseguo 10000 volte noto che per ogni documento
l'occupazione di memoria cresce e non viene mai liberata se non quando il
programma viene terminato.
Avete soluzioni a proposito ?
Come si può liberare la memoria utilizzata dal comando priter.print
all'interno del codice VB ?
Grazie,
Marco

 programma viene terminato.
Avevo intenzione di aprire un thread sull'argomento: secondo me č colpa del
garbage collect delle stringhe.
Se VB6 funziona come i vecchi basic, quando dealloca la memoria occupata da
una stringa non la riutilizza a meno che non venga utilizzata una altra
stringa della stessa lunghezza (o forse anche una di lunghezza minore).
Questo genera alla lunga una gran frammentazione della memoria, che quindi
non viene piů utilizzata. Un pň come nei file system, con la differenza che
lě un file puň essere anche spezzato su + cluster non contigui, mentre le
stringhe in memoria devono per forza occupare spazi contigui.
Nei vecchi basic, tipo il GWBasic esisteva per questa evenienza una routine
interna di garbage collect, che si occupava di compattare le stringhe
utilizzate e per liberare lo spazio. Perň lě il limite delle stringhe era
(mi pare) 64K, ed il garbage collect aveva tempi sě, lunghi, ma ancora
tollerabili. Temo che un garbage collect di qualche mega ci metterebbe dei
giorni.
Inmsomma, se non ho parlato di aria fritta fino ad ora, il tuo problema si
dovrebbe poter risolvere utilizzando durante le Print delle stringhe a
lunghezza fissa, dichiarate come:
Dim sRigaDaStampare as String*100 ' la lunghezza effettiva decidila tu. 100
č solo un esempio
Se riutilizzi sempre la stessa stringa della stessa lunghezza, la memoria
non si frammenta.
Questa perň č una teoria. Prova e poi fammi sapere che l'argomento č molto
interessante!
Ciao
*Roby*

 memoria!!!!!!!!!!!!!!!!!!!!
Sorry. Era solo una idea.
Ma stai dicendo che se fai:
For R=1 to 1000000
    Printer.print
Next
Printer.EndDoc
Dopo questo ciclo ti ritrovi con della memoria allocata? Se č cosě č un
brutto baco del VB.
Al limite prova ad aggiungere Printer.KillDoc  dopo il Printer.EndDoc. Se
non va neppure questo, temo di  avere esaurito tutte le idee.
Ciao
*Roby*
P.S.
A meno che non sia un problema del driver della stampante...

 Altre idee?
Provato a stampare su un'altra stampante con un driver diverso?
Flavio Ronco
-- 
f.ronco@*NonMiServeNiente*
flashnet.it
http://www.metabrains.com
  [Under Construction]
-------------------------------------------------------------
"Che pubblico in gamba! Se ci dite dove lavorate,
domani mattina se abbiamo tempo vi veniamo a vedere"
[Paolo Rossi]

 ha scritto nel messaggio
news:3899AF1A...@flashnet.it...

Già provata la KillDoc
Già provato con diversi driver
Niente da fare
Ora abbiamo provato a scrivere alla Microsoft
Grazie a tutti (se avete altre idee sono ben accette)
Davide
P.S. Il SP4 di VB6 non lo abbiamo trovato ;-)

 P.S. Il SP4 di VB6 non lo abbiamo trovato ;-)
Non so se c'e' ancora nella versione 6, ma io ho trovato un problema nel vb5
che mi costringe a uscire dal vb dopo alcune volte che uso la printer, perchè
ogni volta cambia l'HDC e alla fine si "incasina" perfino con le
textheight("").
Il probema non si presenta però con l'eseguibile finale.
Spero di essere stato d'aiuto
--
/*****************************************************/
                    Paride Dominici
                   Software Developer
 
par...@info-net.it
 
iamp...@geocities.com
 
http://www.geocities.com/CapeCanaveral/Hangar/4841/
 -----------------------------------------------------
 Dobbiamo continuare a sognare, perche' se si uccidono
 i sogni non c'e' piu' alcuna ragione di vivere.
/*****************************************************/