1 messaggio dal 05 marzo 2006
Implementare una LIFO che assolva il compito descritto non è assolutamente complesso e certamente più performante rispetto all'utilizzo delle classi standard.
Si può certamente migliorare rendendola più performante e utilizzando i generics ma già così com'è è una decina di volte più performante della LinkedList e 2 volte più dello Stack (ma con risultato corretto)

Ecco i risultati sulla mia macchina:
TestLIFOList: 00:00:01.2094512
TestStack: 00:00:02.5131372
TestQueue: 00:00:08.3832176
TestLinkedList: 00:00:14.6959524

public class LIFOList
{
int capacity;
int[] values;
int cursor;
int size;

public LIFOList(int capacity)
{
this.capacity = capacity;
this.values = new int[capacity];
cursor = capacity-1;
size = 0;
}

public void Add(int value)
{
values[cursor--] = value;
if (size < capacity) size++;
if (cursor < 0) cursor = capacity-1;
}

public int[] Values()
{
int[] resValues = new int[size];
int curpos = cursor + 1 == capacity ? 0 : cursor + 1;
Array.Copy(values, curpos, resValues, 0, capacity - curpos);
if (size == capacity && curpos > 0)
{
Array.Copy(values, 0, resValues, capacity - curpos, curpos);
}

return resValues;
}
}
rsaccav ha scritto:
Implementare una LIFO che assolva il compito descritto non è assolutamente complesso e certamente più performante rispetto all'utilizzo delle classi standard.

Concordo e ti ringrazio per il suggerimento.
La mia decisione di appoggiarmi a classi già esistenti nasce dalla necessità di avere a disposizioni un po' di interfacce come ad esempio ICollection e ICollection<T> (quindi IEnumerable e IEnumerable<T>) che da riscrivere non sono poi così banali.
Per un'implementazione molto verticale il tuo codice è perfetto ma, se vogliamo avere qualcosa di più... "Generics"  c'è da lavorarci sopra un bel po'.
Ad ogni modo la misurazione delle performance che mi dai mi fa venir voglia di sbatterci la testa: appena creo qualcosa di utilizzabile aggiorno il post nel blog.
Grazie ancora per il tip.

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.