Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Requisiti applicazione
giovedì 08 gennaio 2009 - 16.42
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Teech
Profilo
| Expert
573
messaggi | Data Invio:
gio 8 gen 2009 - 16:42
Stò creando un'applicazione che fa un uso pesante di oggetti in continua costruzione e distruzione. Da quello che o capito il Garbage Collector si preoccupa di liberare lo spazio in memoria in modo "automatico", ma come faccio a capire quanta RAM serve e comunque quali sono i requisiti per far funzionare correttamente/decentemente l'applicazione?
Mi preoccupo perchè programmo su un PC abbastanza potente e quindi potrei non accorgermi di eventuali carichi eccessivi ma l'applicazione andrà in produzione su dei pc molto più attempati...
Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
ven 9 gen 2009 - 16:47
Ciao,
puoi descrivere meglio l'attività dell'applicazione in questione e il tipo di architettura per cui stai optando??
Grazie
Antonio Esposito
MCP, MCTS .NET 2.0 Distributed applications
Teech
Profilo
| Expert
573
messaggi | Data Invio:
ven 9 gen 2009 - 17:26
Praticamente ho un DB SQL al quale mi connetto. Ho creato dei miei Adapter che usano dei DataReader per popolare dei DataTable tipizzati. Ho creato delle classi per gestire i filtri associati ad ogni Adapter.
Gli adapter mi restituiscono sempre delle collection di DataRow (lette dai DataTable): ogni DataRow implementa un'iterfaccia per tipizzarle. Queste collection le utilizzo per popolare delle collection di oggetti "generici" sui quali gestisco i dati lato utente.
L'aspetto che mi preoccupa è che quando istanzio un oggetto generico (ad esempio una Commessa) faccio un'operazione di questo tipo:
- Imposto il filtro per le commesse
- istanzio un DataReader e ne derivo il DataTableCommesse con tutte le commesse filtrate secondo le mie esigenze
- Recupero dal DataTable la collection di DataRowCommessa e le passo ad una collection Commesse
- Sulla collection Commesse, per ogni DataRowCommessa istanzio un oggetto Commessa
In questo modo, passando i dati per riferimento e variando una proprietà dell'oggetto Commessa vario automaticamente il campo di DataRowCommessa associato.
Considerando che ogni commessa sul DB ha una Foreign Key per i clienti, su ogni Commessa istanziata faccio lo stesso processo per recuperare il cliente associato (ho quindi una proprietà in Commessa di tipo Cliente) e qui ho paura di appesantire troppo l'applicazione istanziando troppi oggetti. E' vero che, vista la logica dell'applicazione, non avrò mai più di qualche commessa istanziata (tanto per rimanere sui termini utilizzati), però non so come controllare eventuali eccezioni di Out Of Memory. Il tutto moltiplicato per ogni oggetto dell'applicazione.
Ad ogni interrogazione in per ricercare delle commesse costruisco (Dim c As New Collection) una nuova collection perdendo la precedente (e qui mi dovrebbe venire in aiuto il Garbage Collector per cancellare la collection "persa")
Spero di essere stato chiaro perchè mi rendo conto essere un meccanismo un pò macchiavellico però mi ha permesso di dividere bene gli oggetti e tipizzare in modo capillare gli oggetti del DB.
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
dom 11 gen 2009 - 11:57
Ciao
per quanto riguarda il GC (GarbageCollector) il funzionamento è molto semplice...
quando un oggetto non ha più riferimenti, viene catalogato per la distruzione, e al prossimo giro di GC che può avvenire dopo un po di tempo per inattività dell'utente, oppure quando altri componenti dell'applicazione richiedono molta memoria...
in casi rari possono avvenire errori di tipo System.OutOfMemoryException ma parliamo di casi in cui vengono valorizzate variabili con dimensioni spropositate.. as esempio leggere 1 file di 1.5GB in una variabile di testo... etc...
Per quel poco che ho letto della tua architettura posso rassicurarti che eccezioni simili non ne avrai.... Stai attento però a evitare più di una SELECT sul DBMS quando ne puoi fare 1. Ricorda poi, che i DataSet sono degli oggetti basati su XML, e quindi molto più lenti di classi .NET native.
Se hai altri dubbi, chiedi pure.
Antonio Esposito
MCP, MCTS .NET 2.0 Distributed applications
Teech
Profilo
| Expert
573
messaggi | Data Invio:
gio 15 gen 2009 - 14:49
Ora è tutto più chiaro... Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !