Una semplice (ma solo in apparenza) collection generica
rsaccav non è online. Ultima attività: 06/08/2008 14.33.35rsaccav
Inserito il: 06 agosto 2008 10.03
1 messaggio dal 05 mar 2006 Istalla Microsoft Silverlight!
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;
}
}
RE: Una semplice (ma solo in apparenza) collection generica
m.casati non è online. Ultima attività: 15/10/2008 9.46.07m.casati
Inserito il: 06 agosto 2008 16.22
contributi / Top Poster / Community manager / www.guru4.net / Blog / 2352 messaggi dal 13 giu 2001 Istalla Microsoft Silverlight!
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

Vai a:
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.


maltra - 623 pt
vladimiro - 491 pt
PeppeDotNet - 290 pt

Ultimi vincitori: maltra, vladimiro, PeppeDotNet

Iscriviti anche tu e raccogli punti. Questo mese in palio Windows Vista Ultimate, SQL Prompt e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums