posts - 506, comments - 1705, trackbacks - 139

Architettura e performance

Sono daccordo con il recente post di Mauro e quindi con l'affermazione di Tommaso: "Se non è semplice c'è qualcosa che non va". Questa è stata la mia impressione in diversi lavori che ho visto, ma qui prepotentemente si insinua un altro problema: le performance.

Si, abbiamo macchine da 4GHz, ma certe scelte costano care anche su macchine superveloci.

Si, entro 5 anni arriveremo a 80 core, dice Intel (poi quando parlavo dei 16 core mi davano del visionario), ma sfruttarli per bene non è affatto semplice e gli strumenti sono ancora pochi (tra l'altro questi saranno proprio gli argomenti di una delle mie sessioni ai Community Days).

Ma ...

Ma recentemente ho toccato con mano che alcune scelte architetturali costano in performance e sono di tangibile fastidio all'utente che usa l'applicazione.

Factory, Proxy, MVC, MVP, Adapters, ... sono fantastiche soluzioni by design ... se si chiamano pattern significa proprio che sono stati usati con successo da migliaia di developer e quindi su questo non si discute. Il problema è chi li usa smile_regular.

  • La prima considerazione è che il disegno dell'applicazione è e rimarrà un passo fondamentale per la creazione di una applicazione, e che quegli strumenti sono validissimi.
  • La seconda considerazione è che lo sviluppatore e l'architetto devono dialogare per capire fin dalla stesura dell'architettura per capire quali possano essere i colli di bottiglia e non finire col piangere davanti ad un profiler.
  • La terza considerazione è che le performance vanno misurate perché è troppo facile dare la colpa al mancato uso di StringBuilder o all'architetto eccentrico, ma devo ribadire che se alla performance non ci si pensa fin dall'inizio, alla fine si fa prima a riscrivere, il che è quanto di peggio possa accadere.
  • La quarta considerazione è che i problemi di performance dovuti all'architettura ci sono a prescindere dall'ambiente di sviluppo e possono accadere anche con la programmazione nativa in C++. Solo che chi programma in C++ non ha strumenti insiti nel linguaggio per componentizzare (i componenti ci sono se si usa COM, Corba, Framework, ...) e quindi tipicamente l'architettura è più spartana.
  • Infine quello che ritengo sarà la soluzione ottimale e il miglior compromesso: la generazione di codice. Alcune scelte architetturali sono legate all'uso di tecnologie come Reflection, potenti ma anche arma a doppio taglio.

Concludendo, non sempre fare i "perfettini" con l'architettura paga, anzi tutt'altro.

Quindi tornando al post di Mauro aggiungo che l'architettura non deve essere solo semplice ma anche un compromesso con le tecnologie e i linguaggi che si stanno utilizzando. Non credo alla pura architettura riusabile meno che mai in modo trasversale sul Framework, su Java, su COM, etc. L'architettura si deve 'sporcare', quando è necessario, perché il nostro è il regno della tecnocrazia.

Paragone con un algoritmo di calcolo: lo scrivo in C++ e lo traduco in C# (o viceversa).
Funziona? Si. È efficicente? No, nella gran maggioranza dei casi perché lo strumento ha delle differenze notevoli da cui non possiamo prescindere.

Print | posted on venerdì 20 giugno 2008 9.43 |

Feedback

Gravatar

# re: Architettura e performance

Sento spesso nelle discussioni su scelte architetturali il discorso delle performance. Trovo che parlare genericamente di "performance" non si approcci il problema nella maniera corretta.
Mi spiego meglio, innanzitutto cosa vogliamo ottimizzare?
- La velocità di esecuzione?
- L'occupazione di memoria?
- L'utilizzo delle risorse di rete?
- Minimizzare l'accesso al database?
- Altro?
Ogni volta che si fa un ottimizzazione l'architettura del software diventa più complessa. Questo non significa che non si debba tenere conto delle performance ma trovo che sia molto diffusa la mentalità di ottimizzare a prescindere.
Mi spiego meglio se prima ancora di aver scritto una riga di codice ci poniamo già il problema di cosa potrebbe essere ottimizzato si rischia di partorire già da subito un'architettura difficile da gestire.

20/06/2008 10.29 | Antonio Ganci
Gravatar

# re: Architettura e performance

Come ho scritto sono quelle cose di "tangibile fastidio all'utente". Esempi:
- UI lenta a caricare la prima o le volte successive
- Datalayer/DB poco responsivo
- Caricamento plugin lento
- Eccessivo uso di risorse (non solo memoria, ma prima ancora desktop handles, per esempio) per cui l'applicazione prende possesso del PC
- ...
Non si tratta quindi di performance a tutti costi ma di ciò che l'utente si aspetta, e visto che è lui a pagare ... ;-)

Comunqe sono sorpreso che tu senti tanto parlare di performance come punto di partenza perché tipicamente gli sviluppatori e gli architetti all'inizio sono tanto presi da altro che, per la mia esperienza, viene sempre presa in considerazione alla fine.
20/06/2008 11.31 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

Premetto che un'applicazione "lenta" di default non funziona per l'utente o è inutilizzabile.
L'ottimizzazione è fondamentale "QUANDO SERVE", non a prescindere: ottimizzare di mezzo secondo l'apparire di una dialog ha poco senso, ottimizzare di mezzo secondo un ciclo che viene iterato milioni di volte ha molto senso.
Putroppo nella maggior parte dei casi i "dev" si preoccupano solo di arrivare ad avare qualcosa che "gira" e restituisce "i risultati attesi". Manca una cultura di fondo su tutta la gestione del processo di analisi, sviluppo e test.
Figuriamoci parlare di performance... tanto tra qualche mese esce il processore che va al 150% quindi il problema si risolve con qualche centinaio di euro di upgrade... sempre meno di una settimana di ottimizzazioni a costo interno.
Se tutto il software fosse ottimizzato e spremesse al 100% il nostro hardware chi sentirebbe "realmente" la necessità di cambiare macchina ogni 18 mesi?

Personalmente amo ottimizzare, fin dal Borland C++ 3.x che bello trovare il "Profiler", era parte integrante del processo di sviluppo!

Tanto per fare un esempio cito l'esperienza di un collega: chiamato ad ottimizzare una statistica per un "big" che per analizzare 80.000.000 e rotti di record su una tabella (oracle) impiegava "anche 5 minuti". Sono tanti o sono pochi? sarei curioso di sentire le vostre risposte...
Dopo il suo intervento la stessa estrazione impiegava qualche secondo..... Miracolo? No, la software house che ha implementato il sistema (forse il più grande gruppo italiano di sw) ha semplicemente dimenticato di inserire gli indici necessari...

Chioso con una citazione che (simpaticamente) la dice lunga:
Nell’anno 1969 è bastata la potenza di calcolo di due Commodore 64 per mandare con successo una navicella sulla Luna.
Nell’anno 2003 è necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP. (Qualcosa deve essere andato storto).
PS: e Vista :D?
20/06/2008 11.43 | Andrea Balducci
Gravatar

# re: Architettura e performance

X Raffaele: Ok siamo in sintonia.
Per farti un esempio di mania delle performance durante lo sviluppo in pair con un collega è stato scritto il seguente codice:

for(int i = laps.Count - 1; i >= 0; i--)
{
...
}

io gli ho chiesto per quale motivo scorresse la lista al contrario, la risposta è stata che così Count veniva letta una sola volta (ovviamente è vero). Io ho ribattuto che ogni volta che qualcuno guarderà quel codice si farà questa domanda e visto che la property Count ha un costo praticamente nullo (return della property Count di un oggetto List) perferisco:

for(int i = 0; i < laps.Count; i++)
{
...
}

In cui se ne guadagna in leggibilità.


20/06/2008 12.19 | Antonio Ganci
Gravatar

# re: Architettura e performance

Raffaele, sono perfettamente d'accordo con te. L'architettura deve essere sempre un mezzo, e non il fine. Altrimenti è pura accademia. Un saluto!
20/06/2008 12.25 | Davide Senatore
Gravatar

# re: Architettura e performance

@Andrea. Siamo daccordo e infatti parlo di aspettativa dell'utente.
Quei developer che aspettano che le performance arrivino dai processori più nuovi ormai dovranno cambiare strada. Herb Sutter dice "The free lunch is over" parlando proprio di questo (BTW questo è il titolo della mia sessione ai community days!)

80M record. Non c'è risposta senza avere il contesto, direi che questo è ovvio.
P4 per far funzionare XP. Non sono daccordo, oggi gli OS fanno tantissime cose di più e il libro + articoli di Russinovich sono lampanti. Puoi dire che a te non serve ma oggi le biciclette con una ruota grossa e una piccola non le produce più nessuno anche se funzionerebbero.

@Antonio. Se compili in release non c'è differenza ;-) Il problema è che molti dimenticano la versione release :)))
Cmq concordo sul discorso di fondo. La performance a tutti i costi non serve. Ma lo stesso vale per l'architettura!!!

@Davide. Ciao!
20/06/2008 12.33 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

@Raf: La mia era una velata "provocazione", non mi sognerei mai di tornare al mio vecchio 65SC12 a 2 MHz.
Per il discorso dell'ottimizzazione c'e' anche una sfaccettatura commeciale... un upgrade software può far muovere molti, ma molti milioni di euro... proprio grazie al fatto che l'architect della soluzione si focalizza sull'ottimizzazione del processo di sviluppo piuttosto che delle performance in produzione.
Vissuta sulla pelle, un giochetto che in italia ha messo in circolo X milioni di Euro di solo software...
Dal mio punto di vista un pessimo approccio all'analisi che andava contro tutte le TN Microsoft, ma dal punto di vista commerciale un gran successo.... Altro punto di vista da non sottovalutare... Le cose fatte troppo bene (purtroppo) a volte non pagano in termini economici :(
20/06/2008 14.40 | Andrea Balducci
Gravatar

# re: Architettura e performance


Hola Raf,

leggendo il post mi è sembrato che parti dall'assunto che un miglioramento della architettura richiede un degrado delle prestazioni

giusto?


20/06/2008 17.05 | Luca Minudel
Gravatar

# re: Architettura e performance

Ma io non condivido pienamente. Sicuramente leggere un libro di Patterns e' illuminante e piacevole per uno sviluppatore o per un architetto. Spesso pero' applicarlo alla realta' non e' proprio la stessa cosa. Ma mettere in discussione le performance, mi dispiace, ma non ci sto'.
Troppe volte vedo usare ad esempio il campo DateTime in SQL al posto del SmallDateTime, e parliamo di 4 bei bit in meno!. Siete sicuri che il vostro gestionale usera' date inferiori al 1900? Non penso proprio.
Idem sul DataLayer. Ok avere tutto molto differenziato e ben classificato, avere il nostro UML che ai community days potrebbe far stupire chiunque, ma sbaglio o noi lavoriamo per gli Utenti finali? Non dimentichiamoci mai di questo particolare. L' utente e' quello che usa la UI (quindi le API e il nostro Data Layer), l' utente e' quello che rogna perche' nel suo PC ha ancora un P III/III e non il nostro Dual Core, l' utente e' quello che paga e non vuole aspettare 3 ore per avere un report con un' analisi finanziaria, solo perche' noi, per <stile> facciamo elaborare i dati a 20 layer diversi ...
Ok per la manutenibilita' e l' architettura semi-semplice per poter riciclare e prenere in mano il codice seguende delle <regole>. ma la Usabilita' e le performance, (IMHO) sono il MUST di qualsiasi applicazione.
20/06/2008 17.07 | raffaeu
Gravatar

# re: Architettura e performance

Mi smbra che sia Andrea che raffaeu sottolineino l'esigenza di guardare prima di tutto ai requisiti del cliente. Beh se è così sono quasi totalmente daccordo. Dico quasi perché per raggiungere lo scopo ci sono tanti modi e tra questi ci può anche essere del software scritto "malino".
Il problema che ho voluto sottolineare è che mi è capitato di vedere l'approccio opposto. Super strutturazione a scapito delle performance che *il cliente* si aspetta di avere.

@Luka. No o perlomeno non ne faccio un'equazione. Io parlo di quei casi (assolutamente non rari) in cui la cura quasi "estetica" dell'architettura cozza di brutto con i requisiti di performance e ottimizzazione. Dico anche che l'architettura impatta ma ovviamente dipende da come viene fatta e dal contesto. Se strutturo dei layer di astrazione su un algoritmo di calcolo sto fallendo totalmente perché il calcolo vuole prestazioni allo stato puro. Se strutturo perché le performance/memoria non ne soffrono ed è positivo per la gestione del ciclo di vita dell'applicazione (ivi compresa la sicurezza, quindi la semplicità a cui accennava Mauro), allora si che un buon disegno architetturale è prezioso.
20/06/2008 20.14 | Raffaele Rialdi
Gravatar

# re: Architettura e performance


Raramente ho visto informatici competenti in design e architettura fare scelte di design/architettura che compromettessero le necessità di prestazioni della applicazione. Ne in alcun articolo/libro/principio/teoria del disegno vi è sdetto che è lecito compromettere i requisiti di prestazioni per ragioni estetiche.

Quel "non rari" di cui parli si riferisce a design e architetture non riuscite o a soluzioni disegnate informatici poco competenti.


Questo trade-off di cui parli tra architettura-prestazioni semplicemente non esiste e finche ci stai deintro ti metti sullo stesso piano di quelle architetture non riuscite e dei loro poco competenti ideatori.

Sei troppo in gamba, quindi te lo dico forte e chiaro stai prendendo un abbaglio colossale ;-)
20/06/2008 22.13 | Luca Minudel
Gravatar

# re: Architettura e performance

@Luka. Ci mancherebbe che in un libro/articolo si prediligesse l'estetica dell'architettura rispetto alle prestazioni. Il problema è che certe volte gli architetti e gli sviluppatori si lasciano prendere la mano e a botte di layer si può compromettere il risultato finale.

"non rari ...". Messa così come la scrivi significa che l'architettura è stata sbagliata, sia l'architetto competente o meno. Questo significa che l'architettura corretta deve prendere in considerazione il problema performance altrimenti la perf. è una variabile aleatoria che può determinare il fallimento a prescindere dalla buona archietttura.
Su questo concetto sono daccordo: l'architettura deve prevedere il problema performance e per farlo non può che cedere a compromessi, perché performance è anche questo e lo dicevo nel post iniziale. Questo è il punto centrale.

Il discorso allora si sposta e bisogna valutare se questi compromessi possono rendere poco "estetica" la soluzione architetturale. Io penso di si, e ancora recentemente ho conferme da esempi concreti che ho visto.

"trade off". È indubbio che l'introduzione di layer introduce una elaborazione supplementare. Ai tempi delle prime MFC, veniva omessa la keyword "virtual" per evitare penalizzazioni di performance. Oggi ce la possiamo permettere dentro un layer di business ma non dentro un algoritmo di calcolo dove anche l'accesso al registro piuttosto che in memoria fa la differenza.
Altro esempio. Quando in una architettura introduci dei proxy che spesso sono fatti con reflection (sia per pluggabilità che per costi) il costo in performance è molto elevato. Può essere un problema come no ... dipende dal complesso dell'architettura ma a volte pesa e questo DEVE essere preso in considerazione durante l'architettura.
Lo stesso vale per le architetture a plugin che sono validissime ma se ne abusi, sei cotto. E chi può dire cosa sia abuso o meno? Il giudizio è soggettivo e se le specifiche vogliono la pluggabilità ... ma allora devi prendere compromessi e fare in modo diverso.

Non credo di aver preso alcun abbaglio perché le considerazioni che ho scritto sono frutto di profilazioni e quando faccio le somme ... ;)
20/06/2008 23.50 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

lo spartiacque è semplice

immagina di scrivere una classe per una feature da implementare. non sai ancora prevedere se sarà veloce a sufficenza.
quale strada prendi:
- scrivi la classe facendola più semplice e comprensibile possibile e poi verifichi le prestazioni
- o cominci subito ha impostare la classe in modo che sia ottimizzata o predisposta alle ottimizzazioni?


ce ne è uno simile anche per gli architetti naturalmente :D


leggendo il post mi è parso che tra i due approcci suggerisci il secondo, dimmi se ho capito bene


21/06/2008 2.08 | Luca Minudel
Gravatar

# re: Architettura e performance

Lo spartiacque è semplice se sai prevederlo per tempo, altrimenti non lo è "by design" :)
Se il problema fosse ridotto a una sola classe, la parte di ottimizzazione sarebbe facilmente riducibile ad una banale riscrittura di un'algoritmo ben isolato dal resto del codice. Cosa che ha un impatto minore rispetto ad una architettura inefficiente perché il numero di layer inserisce una serie di delay non accettabili. Quindi la scelta è indifferente se non hai modo di prevedere la sua performance.

Quando parlo di architettura però, io non alludo ad una semplice classe o gerarchia di classi, quella tra l'altro se la può sbrigare anche un developer con un po' di esperienza. L'architetto deve andare ben oltre.

Infine no, non prediligo le performance ad ogni costo (e l'ho già scritto). Sto dicendo che bisogna fare una attenta valutazione che l'architettura non spinga il progetto fuori dai limiti di usabilità che l'utente si aspetta.

P.S. certi algoritmi sono "performance first" sempre. Molti anni fa ho scritto un algoritmo di elaborazione immagini sia usando classi C++ che assembler x86. L'assembler andava più veloce. Non per questo mi metterei a scrivere in assembler una UI (come so che qualcuno faceva ancora fino a pochi anni fa). Il mio post è per sottolineare che non è possibile trascurare le performance come fattore centrale nella redazione di una architettura.

P.S.2 Non mi stupisce poi che sui libri di architettura non si trovi cenno a queste cose. Fowler non parla neppure di sicurezza nelle architetture eppure è un tema che non può che essere affrontato nella fase architetturale. Se non c'è, non significa che non sia importante ;)
21/06/2008 9.57 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

Non dimentichiamoci che l'utilizzo di alcuni "layer" velocizzano parecchio la fase di design infrastrutturale, modellazione del domain object, test. E se il layer è ben fatto può aumentare le prestazioni del sistema a costo "quasi" zero.
Pensiamo all'utilizzo di NHibernate utilizzando lazy loading, dynamic insert e dynamic update. SE il developer ha cognizione di come utilizzare il framework le prestazioni possono addirittura essere incrementate (a parità di tempo di sviluppo) rispetto ad un approccio "low level", soprattutto quando il carico di lavoro deriva dalla non "prevedibilità" delle azioni dell'utente.

1) Il costo della creazione di un proxy può essere di molto inferiore al costo dell'accesso al db.
2) modificando una riga di configurazione possiamo inserire una cache di secondo livello che limita ulteriormente l'accesso al db
3) modificando un mapping (inserendo dynamic insert o dymanic update) possiamo incrementare drammaticamente le prestazioni di persistenza
4) sempre da mapping possiamo cambiare le strategie di fetch dei dati...
etc...

Cosa significherebbe migliorare le prestazioni di una applicazione che nasce per gestire una base dati di 100.000 record e trovarsi a gestire dal secondo cliente una carico di lavoro 100 volte superiore?
Se le scelte di design non portano a soluzioni "scalabili" per esperienza significa riscrivere.... a costo interno.

Concludo (mi rendo conto che sto diventando palloso) che se c'e' una figura identificata dal termine "Solution Architect" ci sarà un motivo, non credete?
Il saper dosare Architettura e Performance non è assolutamente facile, ci vuole esperienza. Passare qualche settimana (notti comprese) ad ottimizzare software con il cliente infuriato sicuramente vi farà vedere i nuovi progetti con occhi differenti.

Ciao a tutti e buon we.
21/06/2008 11.53 | Andrea Balducci
Gravatar

# re: Architettura e performance


allora invece che fare una gara tra architetti e esperti di prestazioni perché non ci chiediamo

- come esprimere un requisito di prestazione in modo efficace
- quali scelte di architettura e disegno danno vantaggi alle prestazioni
- quali smell ci dicono che forse stiamo trascurando un requisito di prestazione e quali che stiamo facendo premature optimization
- quando c'è un problema di prestazione quali indagini svolgere per individuare il collo di bottiglia
- che dinamiche tipicamente avvengono quando si cercano ed eliminano uno dopo l'altro colli di bottiglia
- quali sono in trade-off tipici del miglioramento delle prestazioni ?

questo a trovo un confronto utile in cui architetti e esperti di prestazioni possono imparare gli uni dalli altri.
21/06/2008 12.04 | Luca Minudel
Gravatar

# re: Architettura e performance

@Andrea. Acc, allora proprio non mi sto spiegando. Ho scritto nel post iniziale che gli strumenti che usa l'architetto sono preziosi e funzionano. Stra-detto questo, sto solo cercando di sottolineare che l'architetto *deve* tenere in conto anche il costo in performance e all'occasione saper prendere i giusti compromessi.

@Luka. Io non ci vedo alcuna contrapposizione tra quelle due presunte figure. Alla fine nel ciclo di vita del software lavorano tutti allo stesso progetto.

> "come esprimere un requisito di prestazione in modo efficace". Questo è il cliente a dirlo o perlomeno ciò che il cliente si aspetta e perciò dipende da applicazione ad applicazione. Inutile perdere tempo ad ottimizzare se stiamo già ampiamente dentro le sue aspettative.

> "quali scelte di architettura e disegno danno vantaggi alle prestazioni". Come dice Rico Mariani "measure, measure, measure". Sono le somme a fare la differenza. Usi activator.createinstance? ok, ma quante volte. Questo fa la differenza.

>"quali smell ci dicono che forse stiamo trascurando un requisito di prestazione e quali che stiamo facendo premature optimization". Quando arrivi ad una scelta architetturale per cui tornare indietro è un disastro ... beh quello è il momento in cui il nodo performance deve essere necessariamente risolto. Lo "smell" è come sempre l'aspettativa dell'utente.

>"quando c'è un problema di prestazione quali indagini svolgere per individuare il collo di bottiglia". Profiler, instrumentazione manuale, performance counter, misurazioni di ogni genere.

> "quali sono in trade-off tipici del miglioramento delle prestazioni ?". Una architettura scalabile su più tier è certamente un'ottima soluzione perché fa crescere il complesso solo aumentando l'hardware. Con le CPU multicore si fa più fatica perché la scalabilità su un singolo PC va studiata sia a livello architetturale che a livello di implementazione algoritmica.
Esempio: ci sono algoritmi che si credeva fossero inerentemente seriali per cui oggi abbiamo raggiunto un limite invalicabile di velocità. Recentemente si è scoperto che riscrivendo *totalmente* l'algoritmo è possibile parallelizzarlo parzialmente e quindi guadagnare ancora performance con il nuovo hardware.

Esempio2: hai un servizio WCF che usa WPF o GDI per eseguire delle elaborazioni. Se queste impiegano 20 secondi ciascuna e questi tempi sono al limite delle aspettative utente, come disegnare l'archiettura? L'architettura con più appdomain che permettano di sfruttare le CPU multicore e fare più conversioni contemporanee è totalmente differente da quella che usa una sola architettura. Questo è un caso reale che ho realmente sviluppato io e i tempi di una dualcore sono metà di quelli a singola cpu.
Se queste cose non le prendi in considerazione fin dall'inizio, sei kaput!
21/06/2008 13.03 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

@Raf: mi sono espresso male.. la mia era una testimonianza a FAVORE degli strumenti. Questo significa però ternersi le "porte aperte" all'ottimizzazione fin dall'inizio altrimenti si riscrive, non vedo altra via.

@Raf e Luka: noi di DotNetMarche pensavamo di organizzare un workshop (più o meno informale) dopo le ferie per parlare proprio di questi temi. Se vi va siete sempre i benvenuti, avremo sicuramente molto da apprendere da entrambi. (l'invito è naturalmente esteso a tutti... stay tuned).
21/06/2008 14.46 | Andrea Balducci
Gravatar

# re: Architettura e performance

@Andrea. Ok allora siamo pienamente daccordo.
Per il workshop non lo escludo, sai che sono venuto molto volentieri l'altra volta. Dipende dagli impegni ;)
21/06/2008 15.27 | Raffaele Rialdi
Gravatar

# prima regola dell'ottimizzazione: Don't do it!!!! ... forse

>> Il mio post è per sottolineare che non è possibile trascurare le performance
>> come fattore centrale nella redazione di una architettura.

non ho certo l'esperienza per discutere di questi argomenti nel caso specifico delle tecnologie di cui parlate..

ma in generale concordo!!!

La famosa prima regola dell'ottimizzazione (che a mio parere andrebbe riformulata) dice "don't do it"
che non vuol dire "don't think about it"!!!

Tanto e' inutile menarsela quando scegli di usare questa o quella tecnologia stai gia' facendo volente o nolente una scelta di performance... visto che qualunque tecnolgia ha i suoi limiti per questa piuttosto che quella operazione...

quindi e' inutile fare finta che si possa non pensarci e rimandare a dopo.
01/07/2008 17.21 | Guido
Gravatar

# re: Architettura e performance

Raffaele,

ho letto la tua risposta ad Antonio Ganci sulla differenza fra
for(int i = laps.Count - 1; i >= 0; i--)
e
for(int i = 0; i < laps.Count; i++)

Se ho capito bene la tua risposta, sostieni che in compilazione Release non c'è differenza. Non ti seguo. L'exe generato è praticamente lo stesso sia in Debug che Realse, ed in entrambi i casi con il secondo tipo di ciclo, la proprietà count viene controllata ad ogni giro. Che poi sia molto veloce controllare List.Count è un'altr discorso.

Ho verificato il codice con Reflector.


Ma forse non ho capito bene la tua risposta.

17/07/2008 10.15 | Fabrizio
Gravatar

# re: Architettura e performance

Ciao Fabrizio,
sto rifacendo alcune prove da capo. La fretta è cattiva consigliera. Dammi solo un po' di tempo.
Scusa se questo porta a confusione.
17/07/2008 16.17 | Raffaele Rialdi
Gravatar

# re: Architettura e performance

Ciao Fabrizio, hai ragione non c'è differenza.
31/07/2008 19.47 | Raffaele Rialdi

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 4 and 8 and type the answer here:

Powered by: