Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Risorse del sistema

Ciao a tutti i programmatori VB
Vorrei esporvi un problema a mio parere alquanto strano. Ho creato un
programma VB che gira su un server. Questo programma ogni mattina viene
lanciato dallo Scheduler su un server NT Server 4.0 ed elabora una grossa
mole di dati (mediamente ca. 100 MB) importandoli in una tabella di un
database MDB. Successivamente tramite ADO vengono effettuate delle query e
dei calcoli su questa tabella, memorizzati i risultati ed eliminata la
tabella.
Il programma è una bomba, nel senso che gira velocissimo e fa tutto
correttamente (anche grazie ad un prezioso vostro consiglio)...
l'unico problema è che (mi sembra) non libera correttamente le risorse
utilizzate.
In sostanza succede che quando, terminata l'elaborazione, accedo tramite una
pagina ASP ai dati memorizzati (si trovano in altre tabelle sullo stesso DB
di prima)... si pianta IIS!!
Pensando si trattasse di connessioni rimaste aperte o roba simile ho
ricontrollato tutto (!) il codice ma ho sempre utilizzato i metodi Close e
il settaggio a Nothing degli oggetti utilizzati.
Mi sorge il sospetto che ci sia qualche thread di troppo richiamato
involontariamente o qualcosa di simile.
Ora, dato per scontato che il problema non sta nelle ASP perché da sole non
mi danno mai nessun problema, avreste qualche piccolo suggerimento (tipo
qualcos'altro che potrei controllare) o anche un metodo brutale per buttare
giù tutto ciò che c'é di anomalo al termine dell'applicazione(p. es. API
"distruttive")?
Scusate la lunghezza del messaggio e grazie a chiunque abbia un suggerimento
Ciao
Davide

Io ho un problema simile con un'applicazione che, come la tua, viene
lanciata dallo scheduler su una macchina NT Server.
A prima vista questa sempbra funzionare correttamente nel senso che fa tutto
ciò che deve, ma se apro il task manager vedo nei processi attivi la mia
applicazione tante volte per quante per quante lo scehduler l'ha lanciata
dall'ultimo shut down.
E' come se l'applicazione non terminasse mai.
Anch'io ho controllato bene di non aver lasciato niente di aperto, tant'è
che se l'applicazione la lancio io si chiude correttamente da sola dopo aver
terminato le elaborazioni che fa.
Mah...
  Pino Saffioti
---------------------
pi...@asl1.to.it

 Anch'io ho controllato bene di non aver lasciato niente di aperto, tant'č


 di prima)... si pianta IIS!!
Un paio di domande generiche:
L'applicazione la termini con l'unload della form principale o con
l'istruzione "End"?
Gli oggetti li dichiari come :
Dim MiaVariabile as New TipoOggetto
oppure come :
Dim MiaVariabile as TipoOggetto
Set MiaVariabile = New TipoOggetto
In entrambi i casi la risposta corretta dovrebbe essere la prima.
Ciao
*Roby*

 Set MiaVariabile = New TipoOggetto
Errata corrige, scusa!
Il modo migliore per dichiarare gli oggetti č il secondo, non il primo.
 Dim MiaVariabile as TipoOggetto
 Set MiaVariabile = New TipoOggetto
In questo modo quando hai settato l'oggetto a nothing, non rischi che ti
reinizzializzi ogni volta che lo testi.
Ciao
*Roby*
P.S.
Cosě imparo a non rileggere subito quello che scrivo. 8-(

Scusa, questa non l'ho capita.
la keyword 'New' dovrebbe servire a lanciare il metodo costruttore della
classe cosě che nella variabile oggetto appena dichiarata ci sia anche
l'istanza dell'oggetto.
Che differenza c'č, quindi, fra dichiarare ed istanziare l'oggetto in linea
e fra dichiararlo ed istanziarlo successivamente.
Ciao
--
    Giuseppe Saffioti
-------------------------------------
pino.s...@tiscalinet.it
pino.s...@asl1.to.it

 e fra dichiararlo ed istanziarlo successivamente.
Ci sono  2 differenti svantaggi nella codifica Dim <variabile> as New
<Oggetto>
1) Velocità di esecuzione del codice
L'oggetto viene creato solo quando ne usi una proprietà o un metodo. A quel
punto VB controlla che l'oggetto sia valido e se non lo è, lo crea. Questo
ragionamento VB lo fa ogni volta che accedi ad un metodo o a una proprietà
dell'oggetto e quindi perdi inutilmente del tempo ogni volta che usi la
variabile oggetto.
2)E' impossibile verificare se l'oggetto è valido
Non puoi fare "If not <variabile> is nothing" perchè appena interroghi
l'oggetto, VB lo crea. Questo può generare problemi se, dopo aver distrutto
l'oggetto per liberare risorse, ne interroghi la validità ricreandolo. Le
risorse a quel punto non si liberano +.
Entrambi gli inconvenienti non esistono utilizzando il metodo di
dichiarazione:
Dim <Variabile> as <Oggetto>
Set <Variabile> = New <Oggetto>
Ciao
*Roby*