Trabajo en aplicaciones desarrolladas en C#/.NET con Visual Studio. Muy a menudo ReSharper, en los prototipos de mis métodos, me aconseja reemplazar el tipo de mis parámetros de entrada por otros más genéricos. Por ejemplo, List <> con IEnumerable <> si solo uso la lista con un foreach en el cuerpo de mi método. Puedo entender por qué parece más inteligente escribir eso, pero estoy bastante preocupado con el rendimiento. Temo que el rendimiento de mis aplicaciones disminuirá si escucho ReSharper ...Impacto en el rendimiento del cambio a interfaces genéricas
Puede alguien me explique con precisión (más o menos) lo que está sucediendo detrás de las escenas (es decir, en el CLR) cuando escribo:
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);
}
y cuál es la diferencia 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, sé que esta es una discusión muy antigua, pero tal vez algo me guste como buscar ayuda sobre el mismo problema. De hecho, HAY una penalización de rendimiento en el uso de interfaces y de una manera que nunca había adivinado. Puse una descripción aquí (lo siento: alemán) en mi BLog: http://jochen.jochen-manns.de/index.php/2011/02/05/performance-von-schnittstellen-in-net-aka-the- good-the-bad-and-the-feo/ –
@JMS: Me encantó ese artículo (desafortunadamente, no todos podrán leerlo, ya que está en alemán). Simplemente demuestra que la complejidad crea imprevisibilidad. También es un excelente ejemplo de lo que Jon Skeet llama "tendrías que profundizar en los detalles [...] de la nebulosa comprensión de JITting, thunk, vtables y cómo se aplican", etc. – sehe