Newsgroup: it.comp.lang.visual-basic
Titolo: [URGENTE] Problemi di Out of Memory!!!!

Ho fatto un programma che scarica dei dati da un server, e, dopo averli
elaborati, li sbatte su un DB Access. Fino a qui nessun problema: il dramma
nasce nel momento in cui dopo una modifica che ha portato all'eliminazione
dal codice di diversi Array (anche belli voluminosi) per sveltire le
operazioni, mi trovo che sempre più spesso il programma da un errore di Out
of Memory (fortuna che almeno la gestine degli errori è fatta decentemente e
non crasha tutto)!!! Prima delle modifiche questo non si verificava mai!
Ora, come già detto uso molte meno variabili, e mi preoccupo sempre di
eliminare gli array dopo l'uso tramite l'istruzione Erase, e le stringhe che
possono diventare corpose le reinizializzo ponendole uguali a vbNullString
(per gli altri tipo di variabili non saprei cosa fare, l'Erase funziona solo
con i vettori, giusto?). Ciò nonostante dopo un po' di cicli...booom!!!!
L'unico sospetto che mi sorge è quello di non gestire bene il passaggio di
un vettore ad una funzione tramite il ByRef: in questa maniera io dovrei
passare alla funzione solo un indirizzo del vettore, e dunque non c'è nulla
da eliminare alla fine dell'istruzione stessa, se no il chiamante si
troverebbe l'array vuoto, dico bene?
Chi mi può dare una mano? Sono diperato ormai!!!!
Ps: esiste una maniera per monitorare la dimensione in memoria delle varie
variabili, in modo da scoprire se ce ne è qualcuna che si gonfia oltremodo e
io me ne sono dimenticato?
Grazie infinite!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Chi mi può dare una mano? Sono diperato ormai!!!!
La prima cosa da stabilire è quale memoria si esaurisce.
Esistono sw che ti tengono monitorata la memoria Gdi, la User e la memoria
Totale.
Nell'ottica di ridurre questi problemi, è fondamentale anche sapere quale SP
hai per il tuo VB6.
Una volta scoperta la memoria che si esaurisce, puoi cercare il problema in
maniera mirata.
Ciao
Alberto

 hai per il tuo VB6.
SP5, dovrebbe essere l'ultima, giusto?


 SP5, dovrebbe essere l'ultima, giusto?
Sģ, su questo sei a posto.
Ciao
Alberto

 esaurita.
Fammi qualche nome!


 Fammi qualche nome!
Adesso faccio qualche ricerca on-line, ne scarico qualcuno, lo installo, lo
testo per qualche giorno poi ti mando per e-mail il setup.
Serve anche un manualetto?
Ciao
Alberto



Tanto che ci sei dagli anche una lucidata alla macchina...
Mi chiedo per quale motivo un ng debba essere scambiato per un help desk
dove tutto e' dovuto, mah !
Ciao :-)
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
Database Gate - The Powerful SQL Editor ODBC based
http://www.sgr.info
Email happyman69 (at) 
despammed.com

Scusa ma ti ha solo chiesto un nome, se lo sapevi micca ci mettavi tanto a
postarlo!
Mettiti nei panni di uno che si ritrova di colpo con un prog che non va,
probabilmente per lui il tempo è oro!

 probabilmente per lui il tempo č oro!
Ti ringrazio! E infatti ho solo chiesto un nome, visto che Albe V° ne
parlava come se l'avesse fatto lui il programma, immaginavo che ne
conoscesse qualcuno! Quanto all'Help Desk, l'uso dei NG puň essere discusso,
ma penso che siano fatti apposta per discutere e condividere conoscienze, se
poi si ritengoo certe domande troppo stupide si fa prima a non rispondere!
Ad ogni modo non voglio sollevare polemiche, questo sě sarebbe un uso
sicuramente improprio del NG!!!
Ciao


 va, probabilmente per lui il tempo è oro!
invece per albe è piombo?
partendo dal presupposto che è meglio insegnare a pescare piuttosto che
regalare un pesce (il tutto, naturalmente, non riferito al sottoscritto, che
odia il pesce) forse è meglio che p@olo impari a fare le ricerche in rete.
che poi, il 17 febbraio, hal aveva postato l'indirizzo di un programmillo
che mostra i moduli caricati e la memoria occupata per ogni modulo
http://www.teamcti.com/pview/PrcView.zip
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 Fammi qualche nome!
anzichč
"Conosci qualche nome, per favore? Ciao"
Alcuni dettagli, come il punto esclamativo, l'assenza di un saluto, la
mancanza del 'per favore' o similia, rendono le cose molto piů sgradevoli da
leggere.
Per quanto si debba essere concisi, ritengo che la buona educazione possa
sempre trasparire.
Cosě come l'arroganza, che č l'unica cosa che mi fa veramente incazzare.
Ciao
Alberto

In data Wed, 3 Mar 2004 11:27:43 +0100, Albe V° ha scritto:
[cut]
Stavo per scrivere le stesse *identiche* parole.
Non solo ci sono persone che pensano al ng come ad un help desk dove tutto
sia dovuto ma pure ignorano le basilari regole di comunicazione e di
educazione. Il dramma e' che non se ne rendono conto, come le risposte al
mio post dimostrano.


 condividere conoscienze, se
Ho voluto precisarlo in quanto dubito si tratti di un innocente errore di
battitura...
Ciao a tutti !!!
*Roby*
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 solo per precisazione (scusate ma non ho resistito...)
Ok, ma se ti farai prendere da queste cose, ti vedremo presto in alta
classifica...
Insomma, era proprio il caso?

 battitura...
 Già, peccato che la tua precisazione sia completamente fuori luogo e del
tutto OT!
 Evita la prossima volta di fare un replay inutile!



Non so, ma una fettina di c##o, tagliata sottile e vicino l'osso, che
č piů tenera, non ci starebbe male.
Per il caffč, facciamo un "vetrino", doppio cacao e zucchero di canna,
non troppo caldo, mi raccomando. :-)
Bye, G.

 Evita la prossima volta di fare un replay inutile!
Ok, allora faccio io un *reply* inutile :-P
-- 
ciao,
hal

poi si ritengoo certe domande troppo stupide si fa prima a non rispondere!
Strano... di solito quando non si risponde segue un post in cui ci si
lamenta che non si ricevono risposte :-(
-- 
ciao,
hal


  Infatti...


 Cosě come l'arroganza, che č l'unica cosa che mi fa veramente incazzare.
Su questo sono piů che d'accordo con te! Anzi, ti chiedo scusa per la frase,
che non voleva assolutamente essere sgarbata e arrogante, ma č nata male per
la fretta (dovevo davvero scappare, e infatti sono ricomparso solo
adesso!!!!).
Ciao e Grazie!


 battitura...
Tuscič! Mi č proprio scappato.... :(


 lamenta che non si ricevono risposte :-(
Se le si riceve si č piů contenti, se no amen. Almeno su questo punto sono
innocente!!!


 maniera mirata.
Finalmente, con un po' più di tempo a disposizione (ma è stato un
miracolo!!!) sono riuscito a cercare un po' di post vecchi, ma siceramente
tutti riguardano finestre con n-mila controlli, cosa che nel mio caso non è!
MI sono studiato, poi, un po' di documentazione gentilmente fornita da un
collega, e, pare, che secondo Microsoft una possibile causa di questo
problema siano le chiamate ricorseve delle funzioni quando molto reiterate,
o l'abuso di variabili pubbliche. Nel mio caso, però, le chiamate ricorsive
sono sempre le stesse prima e dopo la modifica. L'unica differenza
sostanziosa è che in una Sub, acquisisco un file di Testo tramite la Get
(file aperto in modalità Binary) piuttosto che con un Line Input (file
aperto in modalità Input). L'esigenza è dovuta al fatto che il file (oltre
30Mb di file di testo) usa come terminatori delle righe del vbLf piuttosto
che dei vbLfCr, percui il Line Input tirava su l'intero file in un colpo
solo richiedendo ore per la sola esecuzione di questa riga di codice. Oltre
a ciò, l'uso della Get mi ha permesso di eliminare un po' di grosse matrici
temporanee. In teoria, quindi, dovrei spremere la macchina ben meno di
prima, eppure, nonostante tempi di elaborazioni drasticamente ridotti, su
procedure successive appena una variabile si gonfia troppo scoppia tutto.
L'unica cosa che mi viene in mente è che l'uso della get (tirando su un byte
alla volta) sporchi qualcosa che non viene poi ripulito. Il problema come
scoprire se è così! Un problema simile l'ho avuto quando, convinto che una
variabile locale si autoeliminasse all'uscita di una funzione, non eliminavo
i vettori tramite Erase!
Ciao e Grazie!


 che non viene poi ripulito.
Tu sei un altro che non legge le risposte fino in fondo, vedo. :-(
Bye, G.

 Tu sei un altro che non legge le risposte fino in fondo, vedo. :-(
Qualcosa può essermi sfuggito sicuramente, ma qui il tempo che ho a
disposizione è veramente ridotto all'osso, e pure la connessione ad internet
è quasi "di frodo"! :*(
Se mi dici così, vedrò appena ho tempo di approfondire un po' la ricerca su
questo maledetto Out of Memory...
Grazie comunque, ciao!


 ricerca su questo maledetto Out of Memory...
Allora sarň piů esplicito. :-/
In 
http://groups.google.it/groups?threadm=c1ded6$1hcvti$1...@ID-108681.news.uni-berlin.de
ti avevo postato una routine, in fondo al messaggio, che io uso da anni
per file anche di 200 mega, evitando di lavorare un byte per volta.
Se il problema č in quella modifica, penso ti possa aiutare.
Bye, G.

 ricerca su questo maledetto Out of Memory...
Cercherò brevemente di spiegarti una cosa:
i sistemi operativi attuali, hanno la possibilità di utilizzare spazio su
disco come memoria Ram (consentitemi questa imprecisione). Quindi, se tu non
imposti un limite, questa memoria può anche diventare (a me è capitato con
alcune SP di Sql-server che lavoravano parecchio) di qualche GB, senza che
questo generi alcun errore.
Per cui, verificando che non ci sia un limite (lo trovi nelle impostazioni
prestazioni del computer), e se c'è variandolo e verificando se l'errore
avviene più o meno rapidamente, puoi arrivare a decidere se è la Ram o meno
che si esaurisce.
Però, considerando che normalmente puoi arrivare a qualche GB, bisogna che
ci siano cappelle molto grosse perchè sia la Ram la risorsa che finisce.
Viceversa, esistono due altre memorie (sempre Ram, fisicamente, ma allocate
in maniera separata), che si chiamano Gdi e User, e che, essendo indirizzate
a 16bit per questioni di retrocompatibilità (che non è l'affinità fra te e
Platinette), sono limitate a 64kB.
Come potrai capire, esaurire queste risorse è molto più probabile che
esaurire la Ram totale.
Basta quindi che ci sia una piccola cazzatina nella gestione, ad esempio,
dei colori dei controlli, che cadere nell'out of memory (in questo caso di
Gdi) è un attimo.
Anche caricare/scaricare form in continuazione può esaurire la memoria (in
questo caso la User).
Per cui, cercati su internet (io non ricordo quale usai a suo tempo, ma ne
trovai almeno 5-6 egualmente validi e gratuiti) un programmillo che ti logga
l'utilizzo di memoria, e determina con sicurezza quale risorsa si esaurisce.
Dopodichè, cercare il problema avrà un senso. Adesso sarebbe un andare per
tentativi.
Ciao
Alberto

 ti avevo postato una routine, in fondo al messaggio,
[cut]
Azz, vedi la differenza tra un vero Newsgrouppatore e un pistacchione come
me: ti ricordi pure dei Post passati, complimenti!!! In realtà non è che non
avessi letto il tuo msg fino in fondo (anche perchè non leggere la routine
allegata avrebbe significato leggere solo l'intestazione del msg!!!),
semplicemente, avendo poco tempo (e ormai l'ho detto un po' troppe volte, mi
sto aanoiando da solo) avevo letto le risposte fino a che non avevo trovato
una soluzione che mi sembrasse accettabile, e a quel punto mi sono messo a
lavorare. Ad ogni modo appena ho un secondo infilo il tuo codice nel mio
listato e ritesto il tutto.
Grazie davvero!


Ottima spiegazione! Appena ho un secondo provvedo.
Ti ringrazio!
Ps: non so se hai letto il mea culpa di stamattina. Non volevo essere
scortese ieri, mi sei stato di grande aiuto! ;)


PROBLEMA RISOLTO!!!!!
Ce l'ho fatta! Il problema risiedeva nell'abuso (e io che credevo di fare
cosa corretta, beata ignoranza!) di ReDim Preserve!!! Me ne sono accorto
casualmente su un'altro programma in cui caricando un vettore facendo un
ReDim Preserve per ogni record i tempi di caricamento diventavano
spaventosamente pių ampi rispetto a fare due cicli (uno di dimensionamento e
uno di caricamento). Eliminati i ReDim Preserve dall'applicazione
incriminata, tutto č tornato a posto!
In ogni caso rigrazio tutti degli spunti interessanti (ho comnunque imparato
qualcosa) e in maniera particolare Albe e Paperino (che mi ha fornito pure
una bella Sub di conversione del formato dei file!!!)
Ciao
