Operazioni multi-thread e metodi statici

domenica 10 giugno 2012 - 21.15
Tag Elenco Tags  C#  |  .NET 3.5  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

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

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

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
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5