Originariamente inviato da andr3a
Oggi ho usato Linq per la prima volta. Mi avevano detto di usare Linq per l'XML e dopo un paio di letture mi son messo giù a scrivere sql per interagire con liste di ogni tipo, come secondo parametro di foreach e altro ancora.

Ora, quanto questo Linq incide sulle performances? Perchè tra lambda, runtime Anonymous assignment, clausole performate appunto in lambda ed altro ... mi son subito preoccupato delle performances.

Allo stesso tempo un collega mi ha immediatamente detto: ok, su quegli if che avevo scritto io potevo mettere breakpoints e analizzare il tutto, su Linqu in query per filtrare come faccio a capire filtri e a debuggare?

Io son certo ci siano metodi appositi per monitorare Linq ma non ho risposto, dato che conoscevo l'argomento più per sentito dire che altro ... ebbene, come sunto, mi dite quali sono i difetti di una classe, metodo, applicazione, scritte interamente in Linq? (o con uso massiccio, per intenderci)

Grazie

Io non mi preoccuperei eccessivamente. Giocaci con un profiler se vuoi sincerartene, ma a meno che tu non debba ripetere quell'istruzione 100000 volte sarà irrilevante.

Parlando di performance in generale. Una volta mi è capitato di dover caricare cento file, scinderli ciascuno in un migliaio di stringhe (ad ogni newline) e confrontare ciascun file con ciascun altro file riassemblando le stringhe. Lì ho scoperto una IMMENSA differenza di performance tra string e StringBuilder. Ma quando la incontri la risolvi.

Un mio collega mi faceva notare che un cast richiede circa 20 volte il tempo richiesto da un normale assegnamento. Tuttavia non tiene conto della velocità di un processore di oggi. Non tiene conto dei giorni uomo richiesti per correggere un codice meno strutturato, e soprattutto non tiene conto che un DAC strutturato male può trasformare i 0,1 secondi richiesti da una stored procedure in 2 secondi per una singola semplice get.

I rallentamenti, nella mia esperienza, non sono dovuti ai milionesimi di secondo che si sommano, ma a castronate appunto da 0,5 secondi a botta. Però il profiler aiuta comunque.

Anche i bug del framework contano. L'accesso a file XML di 300 MB in c# è performantissimo rispetto a Java, almeno usando DOM. Intendo secondi contro minuti.

Oppure in MySQL le insert delayed sono velocissime rispetto alle insert (400.000). O ancora le subquery sono lente rispetto ai JOIN, ecc.