Secondo Microsoft documentation, chiamare Clear() su un elenco è un'operazione O (n). Suppongo che questo sia dovuto al fatto che se la lista dovesse contenere riferimenti, sarebbe necessario annullarli. Mi chiedevo se Clear() è ancora un'operazione O (n) se l'elenco ha tipi di valore, poiché la capacità non viene modificata. Non dovrebbe essere sufficiente ripristinare il puntatore dell'indice e contare?C# sta cancellando un elenco <T> con tipi di valore ancora un'operazione O (n)?
Sto chiedendo questo perché in un'applicazione corrente stiamo usando elenchi che vengono cancellati centinaia di migliaia di volte in un lasso di tempo molto breve, e volevamo sapere se ci potrebbe essere un'implementazione diversa che lo rende più veloce.
Un tipo di valore può contenere un riferimento che l'utente si aspetterebbe di essere andato dopo aver chiamato 'Cancella'. Devi sovrascrivere o riallocare l'intero array sottostante nel caso generale. –
che dire solo chiamando la nuova lista e lasciando che GC gestisca la rimozione del contenuto dalla memoria? Forse potresti implementare un'estensione che gestisce la sovrascrittura e la dimensione del "nuovo" (non nuovo ma sovrascritto contenuto) che significa che non si elimina mai. –
L'elenco potrebbe non essere il tipo di dati per te. –