Lavoro su applicazioni sviluppate in C# /. NET con Visual Studio. Molto spesso ReSharper, nei prototipi dei miei metodi, mi consiglia di sostituire il tipo dei miei parametri di input con quelli più generici. Ad esempio, Elenco <> con IEnumerable <> se uso solo l'elenco con un foreach nel corpo del mio metodo. Posso capire perché sembra più intelligente scriverlo, ma sono piuttosto preoccupato per le prestazioni. Temo che le prestazioni delle mie applicazioni diminuirà se ascolto ReSharper ...Impatto sulle prestazioni del passaggio a interfacce generiche
Qualcuno può spiegare a me con precisione (più o meno) quello che succede dietro le quinte (cioè nel CLR) quando scrivo:
public void myMethod(IEnumerable<string> list)
{
foreach (string s in list)
{
Console.WriteLine(s);
}
}
static void Main()
{
List<string> list = new List<string>(new string[] {"a", "b", "c"});
myMethod(list);
}
e qual è la differenza con:
public void myMethod(List<string> list)
{
foreach (string s in list)
{
Console.WriteLine(s);
}
}
static void Main()
{
List<string> list = new List<string>(new string[] {"a", "b", "c"});
myMethod(list);
}
Ok, so che questa è una discussione molto vecchia ma forse qualcosa lo colpisce come se stessi cercando aiuto sullo stesso problema. In effetti, c'è una penalità nelle prestazioni nell'uso delle interfacce e in un modo che non avevo mai immaginato. Metto una descrizione qui (mi dispiace: tedesco) nel mio BLOG: http://jochen.jochen-manns.de/index.php/2011/02/05/performance-von-schnittstellen-in-net-aka-the- good-the-bad-and-the-brutto/ –
@JMS: mi è piaciuto quell'articolo (sfortunatamente non tutti saranno in grado di leggerlo dato che è in tedesco). Ciò dimostra che la complessità rende l'imprevedibilità. È anche un ottimo esempio di ciò che Jon Skeet chiama "dovresti scavare nei dettagli profondi della [...] confusa comprensione di JITting, thunking, vtables e come si applicano" ecc. – sehe