PDA

View Full Version : [VB .NET] - Problema Eccessivo Uso Memoria


t4-maxx
05-06-2006, 01:43
Mi son appena avvicinato alla programmazione con VB .NET 2005, e per studiare un po’ il linguaggio sto creando un classico programmino stile rubrica (anche se ben accessoriata) che si interfaccia con un database SQL Server 2005.

Ho il problema che il software fa un uso smisurato della memoria; basta avviare il programma e già son 12Mb utilizzati, se apro il form per gestire la rubrica (una tabella con circa 30 campi), gestita mediante table adapter creato col wizard, l’occupazione di memoria schizza a 25Mb, e la cosa assurda è che in tabella ci ho messo giusto un paio di record tanto per testare il funzionamento! Va da sé che se poi apro anche altri form l’uso della memoria continua ad aumentare in maniera esponenziale; immagino che il problema stia nel fatto che i dati son caricati tutti in memoria, anche se non riesco a capire come 3 record possan occupare 25Mb !!!

Inoltre, chiudendo il form la memoria non viene comunque scaricata; ho provato a usare il comando clear per il dataset, senza risultato. Avevo anche provato a gestire inserimenti e visualizzazioni da codice con comandi sql anziché usare i tool visuali, ma aldilà del maggior tempo di programmazione ottenevo che si occupava meno memoria ma quando c’era da far un insert o una select i tempi eran biblici (almeno usando i dataset ci mette di più a caricare ma una volta che son in memoria si procede ragionevolmente spediti)

Come faccio a ridurre drasticamente il consumo di memoria e ottenere contemporaneamente una buona velocità di esecuzione del programma? Può aiutare creare più dataset anziché uno unico che contiene i table adapter per tutte le tabelle?

Grazie in anticipo a chiunque mi darà una mano :)

0rph3n
05-06-2006, 07:36
non ho mai fatto caso all'occupazione di memoria quando usavo il vb 2005, dopo il caffè carico un vecchio progetto e do un'occhiata!

0rph3n
05-06-2006, 09:11
mmm ho notato anch'io un'occupazione che va dai 20 ai 30 mega!
faccio uso dei connector/net per mysql che sono basati su ado.net!
per quanto riguarda i form se non sbaglio va chiamato il metodo dispose dopo averli chiusi!

t4-maxx
05-06-2006, 13:01
Si ho provato ad usare il metodo dispose per i form, oltre che per i dataset, ma senza esito; credo di aver capito frugando su internet che ciò dipenda dal fatto che quel comando in .NET non implica l'immediato rilascio della memoria occupata ma solo dare una sorta di indicazione al Garbage Collector che poi decide lui se e quando levarla...

Altra cosa che non capisco ... apro il form, senza far alcunchè lo richiudo, la dinamica della memoria è la seguente:

12Mb Apro il programma
25Mb Apro il form della rubrica
25Mb Chiudo il form della rubrica
26Mb Riapro lo stesso form
26Mb Lo richiudo
27Mb Lo riapro

... e così via. Sottolineo che per la sola apertura non setto nè variabili nè costanti nè nulla. Il form è semplicemente il classico schedario che permette di scorrere tra i record e inserisli/aggiornarli/eliminarli ... senza neanche usare codice "mio" ma appoggiandomi agli strumenti di sviluppo visuale di VB Studio.

Quindi, per esser precisi, Creo il programma, ci aggiungo un form, creo un dataset con i datatable di tutte le tabelle del database, e dal box datasource trascino nel designer la tabella ... !

Inoltre, per curiosità ho provato a creare altri 2 form che si collegano ad altre 2 tabelle ... anche queste con pochissimi record ... il risultato è che aprendoli tutte e tre assieme arrivo a 50Mb di occupazione di memoria, e ripeto i dati son irrisori!! Che 10record occupino 50Mb ha dell'incredibile!