L' uso di una dichiarazione Public IE as Object e' l' alternativa all' uso di Dim IE as Object a livello di modulo; nel primo caso si alloca un unico spazio per la variabile IE, nel secondo caso si alloca uno spazio ogni volta che si esegue la Dim (il che diventa un problema quando la Dim fa parte di un ciclo che si rilancia in continuazione).
Ora se tu non hai una IE Quit, con quel codice dovresti trovarti con molti processi iexplorer in memoria; cosa facile da controllare con TaskManager.
Anche lavorare con una sessione sempre aperta non e' consigliato:
Anthony ha scritto:Stranamente e' molto peggiore la situazione lavorando con una sola sessione di IE sempre attiva; in questo caso dopo un migliaio di cicli il processo iexplorer.exe era cresciuto fino 1.8 gigabyte, quindi in rotta inesorabile verso la saturazione della memoria...
Quindi la raccomandazione e' di avere oggetti dichiarati in modo condiviso tra i tuoi moduli (es banale: Public) ma che vengono periodicamente chiusi (IE Quit) e svuotati (Set IE=Nothing); per "periodicamente" non si deve intendere necessariamente "al termine della navigazione corrente" ma va bene "di tanto in tanto", ad esempio al termine di una indagine che magari comporta la navigazione di parecchi link in successione.
Infine: "ovviamente" se un oggetto rimane attivo (mancanza di IE Quit e IE=Nothing) lo stesso oggetto non va ricreato [es con
Set IE = CreateObject("InternetExplorer.Application")], altrimenti ti ritrovi con la memoria piena di processi iexplorer; potresti sostituire il
Set IE = CreateObject("InternetExplorer.Application") con un piu' articolato
- Codice: Seleziona tutto
If IE Is Nothing Then
Set IE = CreateObject("InternetExplorer.Application")
End If
Ciao