Newsgroup: it.comp.lang.visual-basic
Titolo: webbrowser memory leaks

di certo riguarda vb6, credo anche dotnet.
per provare, un form con command, webbrowser e timer con intervallo a 
piacere, basso tipo 3000 per sveltire la prova. codice:
Option Explicit
Private Sub Command1_Click()
    Timer1.Enabled = Not Timer1.Enabled
End Sub
Private Sub Timer1_Timer()
    Static n As Long
    n = n + 1: Command1.Caption = n
    If n Mod 2 = 0 Then
        WebBrowser1.Navigate "about:blank"
    Else
        WebBrowser1.Navigate "
http://www.google.it
"
    End If
End Sub
se lo si fa girare un po', si vede che ram e swap usati aumentano lentamente 
ma inesorabilmente.
questo test al momento sta usando 8+16 mb, ma un prog serio mio che già ne 
prende 300 di suo dopo qualche ora arriva a 1.1 + 1.1 gb, impallando tutto 
il sistema.
ho trovato centinaia di pagine sull'argomento, ma nessuna soluzione chiara, 
se non chiudere il programma, il che in certe situazioni non è possibile.
qualcuno l'ha risolto? come?
grazie

 se non chiudere il programma, il che in certe situazioni non č possibile.
Fare un load dinamico del webbrowser e scaricarlo ogni tot ?
Lo so che parlavi di soluzione e questa ad essere buoni č una
pezza (e pure brutta), ma ho ancora qualche decimo, ho dormito
male, ho fatto colazione da poco, senza caffč... e non hai idea,
ma quelle cavallette...!
Bye, G.

 ma quelle cavallette...!
io uso il controllo e non l'istanza, ma ho trovato uno che diceva che faceva
dim w as new webbrowser
a ogni giro, ed era la stessa cosa.
la soluzione non credo sia ovvia, o non si troverebbero tutte quelle pagine 
sull'argomento, per vb classico, dotnet, c++, c#, mfc...
msdn parla di problemi con riferimenti circolari in jscript e dom, ma in 
about:blank non credo ci sia molto js...

 about:blank non credo ci sia molto js...
detta così.....sembrerebbe che ogni volta che si attiva...."si
rifaccia" posto in memoria!....non ho mai usato un controllo web in un
timer!
Forse non è il controllo web ...ma il programma che fa aumentare la
memoria...si spiegherebbe anche la lentezza (io presumo che se fosse
vero che è colpa dell'ocx...se carichi una pagina complessa...vedresti
schizzare le risorse....ma se invece aumentano
lentamente....propenderei per il compilato che non libera i
riferimenti e ne crea di nuovi ogni chiamata del timer!)
In net usare il dispose ha effetto???
Chiudere dentro USING l'interrogazione del webbrowser???
Non cambia nulla???

 qualcuno l'ha risolto? come?
Non so se possa esserti utile ma sotto VB6 io uso sempre il controllo
webbrowser di mozilla gecko:
http://www.iol.ie/~locka/mozilla/control.htm#download
Utilizzarlo al posto di quello che già hai è semplicissimo: elimini il
controllo di MS e metti questo dandogli lo stesso nome del precedente.
I metodi e le proprietà che espone sono gli stessi.
Nicola

In net usare il dispose ha effetto???
Chiudere dentro USING l'interrogazione del webbrowser???
Non cambia nulla???
il problema grosso me lo crea in vb6. in dotnet ancora non l'ho collaudato 
seriamente.
perň a quanto ho letto si ripropone pari pari in dotnet.
e d'altra parte, se ie firefox e safari sono tuttora dei vampiri succhiaram, 
forse la soluzione non č proprio immediata.
quando rifiato provo a incapsulare il wb da qualche parte e ad azzerarlo a 
ogni navigata. ma al momento l'unica sembra sia chiudere tutto e riaprire.
vabbe', sono fiducioso, vedremo.
ciao 

"Nicola Ottomano"

grazie nic
l'ho provato qualche volta, gira anche in vista, ma metodi e proprietà non 
sono proprio gli stessi.
per dirne una, al wb
.navigate "<html><body><h1>ciao</h1></body></html>"
o simili vanno benone.
a gecko manco pe'gnente. vuole almeno un file.
si può fare, ma non è proprio lo stesso.
a parte questo, che firefox consumi ram piu' di quanto lehmann consumi soldi 
altui, ti dice niente? :)
nic, il tiepido, il riso alla pilota (nuvolari) e la polenta rossa 
incombono.
cominciamo a metterci d'accordo, che di solito siamo più lenti di un 
interpretato? :)
gbc starà lurkando? mah...
ciao 

 gbc starà lurkando? mah...
Per me va bene. Farei i primi giorni di aprile.
Volendo potremmo andare in quel di Prato a trovare il Wodkino nazionale,
che ne dici?
Nicola

 che ne dici?
per me bene sia periodo che destinazione. sono vent'anni esatti che non vado 
a prato, e a me piace molto. se arrivi qui in treno, poi possiamo usare la 
mia.
wodka, per te ok?
nonno gibi, sei del gruppo? 

 OLECMD*, e diceva che  fontsize non era supportato. tu ci sei riuscito?
Non mi sono preoccupato del fontsize, anche perchè un browser per
bambini di solito vuole sono icone belle grandi e "puffose".
Nicola

 bambini di solito vuole sono icone belle grandi e "puffose".
non ti sei preoccupato nemmeno dei leaks mi sa :)
se prendi l'esempio del mio primo post, al posto di webbrowser1 metti 
mozillabrowser1, compili e tieni d'occhio project1.exe in taskman, in un 
minuto ha aumentato 1 mb di ram e 1 mb di swap...
probabilmente in una navigazione normale si avverte meno, ma se metti il 
timer a 10" sono 360 pagine ogni ora, cosa che difficilmente un essere umano 
fa, e si sente molto.
stanotte il wb in 6-7 ore è arrivato a 1.8 gb ram + 1.8 gb swap. chiuso 
l'exe, il pc ci ha messo qualche minuto a riprendersi...
minimem
http://punto-informatico.it/s_2387443/Download/News/minimem.aspx
tiene sotto controllo ie, ff e altre cose, e funziona. purtroppo non riesco 
a dirgli di controllare anche il mio exe.
ciao 

 wrote:
zac
...a me sta cosa torna poco!
ma veramente poco.....sarà che sono un programmatore sempre meno
programmatore e sempre più filosofo fitosemantico ...ma non mi torna
mica tanto!
Io eseguo questa routine neuronale...contestamela punto punto:
1) Schiaffi un controllo web broser nel tuo programma....essendo l'ocx
di vb6 un wrapper....di fatto esegui IE (la versione non la sò!)
Ergo
se apri una pagina web consumi una certa dose di risorse (RAM e spazio
su HD)
Sai quantificarle? se si siamo a posto!...altrimenti andiamo pure a
berci un martini di metà pomeriggio e non ci bachiamo tanto i
"benemeriti"!!!
Posto che tu sappia l'occupazione di risorse....clicca sul tasto
"Ricarica" "refresh" "Risparami questa strac%%%o di pagina in vena"
l'occupazione di risorse cresce?
probabilmente al primo refresh si....anche al secondo...ma al
terzo?...al quarto?
Si stabilizza???... come probabilmente un S.O. serio farebbe???
Se dopo un po si stabilizza e ad ogni refresh manuale NON cresce....la
colpa non è di windows ma del tuo programma (ma probabilmente non tua
in quanto programmatore)
Se invece cresce...eh beh...telefonatina a Redmond "Mi passa il signor
Porte???"...e poi lo insulti!
Se non cresce (ma per essere sicuro clicca su refresh qualche decina
di volte!!!!)
allora forse il problema sta nell'accoppiata ocx + compilatore....e
per me sono riferimenti che non distrugge...puntatori che non
riutilizza e che non distrugge ed amenità varie!...ecco che ha senso
riavviare il programma: distruggi il workspace dell'applicazione!...ed
anche i puntatori "scaduti" ma non "gettati"
Sarò una pippa di programmatore....ma per me è così!
Resta quindi, se ho ragione, da vedere come effettuare un "flush" di
questo spazio inutilizzato....ma và oltre le mie doti di filosofo
fitosemantico!

allora forse il problema sta nell'accoppiata ocx + compilatore....e
per me sono riferimenti che non distrugge...puntatori che non
riutilizza e che non distrugge ed amenità varie!
questo mi sembra molto più probabile. ms (ms, msdn, blog ms, ecc) parla di 
gestione del jscript (scrivono proprio così) è del dom.
---
ci sono ristoranti intorno a prato che accolgono cani vecchierelli, ormai 
poco propensi a muoversi ma sempre più propensi a sbafare? eventualmente 
fosse bel tempo, con un giardino?