Ho una lista, a cui scrivo una volta in ogni ciclo di aggiornamento e poi creo alcune attività che creano una lettura che elenca e crea una copia per manipolare quei dati.
Più o meno è List.ToList()
call per creare una nuova lista invece di usarla per riferimento. Ogni attività manipola i dati in se stessi e produce i risultati.
Attualmente sto usando un blocco tradizionale sotto forma di
lock(LockObject){
//write stuff
}
durante la scrittura e
lock(LockObject){
localList=List.ToList();
}
durante la lettura.
L'utilizzo dell'oggetto ReaderWriterLockSlim
invece del modo in cui lo sto facendo ora mi offre vantaggi in termini di velocità? Inoltre, il metodo ToList()
è considerato una lettura in questo caso?
Modifica chiarificazione
- I lettori creano una copia perché manipolano i dati in modo diverso, ognuno di essi rimuove o aggiunge dati all'elenco su a modo loro. (alcuni potrebbero aggiungere dati precedenti di cui hanno ancora bisogno mentre altri rimuovono i dati di cui non hanno bisogno. Anche il ciclo di aggiornamento si verifica una volta ogni pochi secondi, quindi è comune.
- A volte, se l'immissione dei dati è molto veloce, potrebbe iniziare un ciclo di aggiornamento / scrittura prima che tutti i lettori abbiano completato l'elaborazione (ma se ottengono i dati aggiornati invece non è un problema per me).
- Fondamentalmente i lettori sono lì per presentare i dati correnti a altri. Quindi, se i dati vengono modificati prima ancora che inizino a presentarli va bene. Finché non provano a elaborare i dati mentre sono in fase di aggiornamento (che probabilmente genererebbe un'eccezione)