Requisiti applicazione

giovedì 08 gennaio 2009 - 16.42

Teech Profilo | Expert

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


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

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


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

Ora è tutto più chiaro... Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5