Ho un server che gestisce più connessioni socket in entrata e crea 2 thread diversi che memorizzano i dati in formato XML.Quando utilizzare il thread di blocco in C#?
Stavo usando l'istruzione lock
per la sicurezza del thread quasi in ogni gestore di eventi chiamato asincronicamente e nei 2 thread in diverse parti del codice. Usando tristemente questo approccio la mia applicazione rallenta notevolmente.
Ho provato a non utilizzare lock
e il server è molto veloce in esecuzione, anche l'archiviazione dei file sembra aumentare; ma il programma si blocca per motivi che non capisco dopo 30 secondi - 1 minuto. di lavoro.
Così. Pensavo che il modo migliore fosse usare meno lucchetti o usarlo solo là dove è strettamente necessario. Come tale, ho 2 domande:
è la serratura necessaria quando scrivo per le variabili pubbliche accessibili (C# liste) solo o anche quando ho letto da loro?
Il blocco è necessario solo nei thread asincroni creati dal gestore socket o anche in altri luoghi?
Qualcuno potrebbe darmi alcune linee guida pratiche, su come operare. Non posterò l'intero codice questa volta. Non ha senso pubblicare circa 2500 righe di codice.
Non abbastanza specifico, guarda qui per informazioni generali: http://www.albahari.com/threading/ – eulerfx
C'è tutta una serie di possibili programmi - da assolutamente sbagliato/incredibilmente veloce a sempre corretto/ragionevolmente lento. Sembri colpire entrambe le estremità nei tuoi esperimenti. La sicurezza del threading non è un argomento banale, quindi consiglierei di leggerlo piuttosto che cercare di ottenere "linee guida pratiche". Cioè Il link di eulerfx è un buon punto di partenza. –