In passato, ho avuto molto successo usando solo .NET Dictionary
, con un TKey
formato dalle coordinate X, Y unite insieme. Tuttavia, le sue prestazioni di lettura, nonostante siano ammortizzate a tempo costante, sono un collo di bottiglia in un mio progetto.
La mia applicazione deve eseguire molto di letture, e trarrebbe grandi benefici se le prestazioni della lettura fossero simili a quelle di un array. I miei dati hanno un altissimo livello di località spaziale; allegata è un'immagine che mostra due grafici della distribuzione di alcuni dati di esempio su un piano 2D (mi dispiace per la mancanza di etichette) ; sulla sinistra ci sono dati con una bassa localizzazione spaziale, e sulla destra c'è l'aspetto dei miei dati (è sempre una massa connessa e un blocco di forma).
Potrei usare un array (calcolando un rettangolo di delimitazione ( bRect
) attorno ai dati e poi facendo data=array[(y-bRect.Top)*bRect.Height+x-bRect.Left]
) ma poi dovrei ricostruire l'intero array ogni volta che bRect.Height
è cambiato, o bRect.Width
è aumentato.
E quindi la mia domanda è, dato l'alto grado di localizzazione spaziale, è davvero la Dictionary
la scelta migliore qui? C'è un altro approccio che potrei prendere dove potrei avvicinarmi alla matrice come le prestazioni di lettura, ma non dover ricostruire l'array quando i dati vengono aggiunti? (Non è necessario rimuovere i dati)