No me importa el orden de los elementos.¿Qué es más rápido: Union o Concat?
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
http://msdn.microsoft.com/en-us/library/bb302894.aspx
No me importa el orden de los elementos.¿Qué es más rápido: Union o Concat?
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
http://msdn.microsoft.com/en-us/library/bb302894.aspx
Unión elimina duplicados. Concat no lo hace.
Por lo tanto, producen resultados diferentes si las fuentes contienen algún elemento en común o tienen algún duplicado interno.
Si puede garantizar que no hay duplicados, o si hay pocos y no le importa tenerlos en su salida, Concat será más rápido ya que no hay necesidad de probar cada valor con respecto a lo que ya se ha obtenido.
Sin embargo, si hay muchos duplicados y no los necesita, el procesamiento adicional en Union para eliminar los duplicados puede compensarse con los ahorros en el código que consume los resultados.
¿Solo le preocupa la velocidad de ejecución? ¿Cuánto tiempo te lleva procesar un elemento cuando lo recibes?
Concat
es más simple: no necesita realizar ningún procesamiento en sí mismo, ni amortiguar los resultados que ya se devolvieron. Sin embargo, producirá más resultados si hay elementos en la intersección. Si va a tomar mucho tiempo procesar cada resultado, Concat
puede terminar efectivamente siendo más lento.
En mi caso, usaré un Distinct() al final, lo que favorece el uso de Union, creo. –
Si usa Union, entonces no necesita llamar a Distinct después de todos modos. –
Union elimina los duplicados entre las listas, pero si la primera lista tiene duplicados dentro de ellos, la unión no los eliminará. Por lo tanto, puede ser necesario llamar a Distinct, dependiendo de las circunstancias. –
Lo dicho anteriormente es correcto. Esta es sólo una pequeña adición de algunos casos especiales:
Si tiene que concatenar dos listas, por ejemplo, y si necesita toda velocidad, considere el uso rendimiento. Por supuesto, esto es mucho menos flexible y cómodo que Unión o Concat en Linq. Por lo tanto, solo tiene sentido en casos especiales.
Esta propiedad, por ejemplo, proporcionará la misma que List1.Concat (Lista2)
public IEnumerable<MyObject> AllObjects
{
get
{
foreach (MyObject o1 in List1)
yield return o1;
foreach (MyObject o2 in List2)
yield return o2;
}
}
'Concat' exactamente lo hace como lo muestra en el ejemplo (vea: [fuente] (https://referencesource.microsoft.com/#System.Core/System/Linq/ Enumerable.cs # 800)). Entonces no hay necesidad de implementarlo por su cuenta. – scher
pruebe ambos métodos. Saca un cronómetro. Entonces sabrás. El "análisis" de rendimiento basado en * conjeturas *, sin importar cuán educado sea, no es realmente útil como base para tomar decisiones * de ingeniería. –