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
ASP.NET 2.0 / 3.5 / 4.0
Operazioni multi-thread e metodi statici
domenica 10 giugno 2012 - 21.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
.NET 4.0
|
Visual Studio 2010
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
dom 10 giu 2012 - 21:15
Salve a tutti,
vi pongo un quesito sulla progettazione di una web application.
Ho implementato diversi metodi che servono per svariate operazioni lettura e scrittura su file e database, lettura e scrittura su oggetti statici residenti in memoria...
questi metodi sono stati implementati come statici all'interno di una classe statica, l'ho fatto per comodità in modo da non dover ogni volta istanziare un oggetto per il loro utilizzo.
Vorrei sapere a questo punto da voi espertoni i pro e i contro nell' utilizzare questo tipo di approccio, potrei avere dei problemi in un contesto dove più utenti utilizzano gli stessi metodi contemporaneamente?
Andrea Restucci - Web Developer
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
mar 12 giu 2012 - 13:52
teoricamente:
i metodi statici sono più performanti dei metodi d'istanza.
In pratica però dobbiamo fare i conti con un ambiente multithread come lo è un'applicazione web.
proprio per i metodi che accedono a risorse esterne (DB, file, oggetti in memoria escluse session, comunque qualcosa condiviso), bisogna fare i conti con la concorrenza.
Specie nei metodi statici, dovremmo assicurare l'utilizzo esclusivo delle risorse poiché eventuali variabili/risorse locali, sono anch'esse statiche, e quindi uguali a tutti i thread (ma anche riferimenti ad altre classi/metodi statici).
Per assicurare l'utilizzo esclusivo, si usano tecniche di lock, che costano molto (vedi lock() o Monitor).
Come sempre la verità sta in mezzo. Ovvero, quando possibile puoi utilizzare i metodi statici (helper che non usano risore), quando necessario puoi usare metodi d'istanza per creare oggetti univoci al thread (connessioni al DB), quando ci sono situazioni "critiche", dovresti invece usare metodi d'istanza con tecniche di lock (accesso a file in simultanea, risorse condivise tipo variabili application)
ti lascio alcuni riferimenti per approfondire.
http://blogs.msdn.com/b/benchr/archive/2008/09/03/does-asp-net-magically-handle-thread-safety-for-you.aspx
http://dotnet.dzone.com/news/c-singleton-pattern-vs-static-
http://justgeeks.blogspot.it/2008/07/thread-safety-in-c-and-aspnet.html
http://stackoverflow.com/questions/1866407/are-static-methods-in-asp-net-code-behind-classes-non-thread-safe
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mar 12 giu 2012 - 14:29
ok grazie Gluck,
diciamo allora che il prossimo passo è quello di analizare i metodi statici che ho implementato e in base al loro compito prendere le oppurtune decisioni, lascio per il momento la discussione aperta, sicuramente avrò ulteriori dubbi...
Andrea Restucci - Web Developer
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 !