Que é mais rápido: União ou Concat?

Publicado 26/08/2009 em 22:48
fonte usuário
Em outras línguas...                            


3 respostas

votos
49

União remove duplicatas. Concat não.

Então, eles produzem resultados diferentes se as fontes não contêm nenhum item em comum, ou ter qualquer duplicatas internos.

Se você pode garantir que não há duplicatas, ou se não são poucos e você não se importa em ter-los em sua saída, Concat será mais rápido já que não há necessidade de testar cada valor contra o que já foi produzido.

No entanto, se houver muitas duplicatas e você não precisa deles, o processamento extra na União para remover os ingênuos podem ser compensado pela economia em seu código que consome os resultados.

Respondeu 26/08/2009 em 22:50
fonte usuário

votos
9

Você só se preocupam com a velocidade de execução? Quanto tempo você leva para processar um elemento quando você recebê-lo?

Concaté mais simples - não precisa executar qualquer processamento em si, ou buffer os resultados que ele já devolvidos. No entanto, ele vai produzir mais resultados se existem elementos no cruzamento. Se você vai levar um longo tempo para processar cada resultado, Concatpode acabar efetivamente sendo mais lento.

Respondeu 26/08/2009 em 22:51
fonte usuário

votos
3

O que foi dito acima é certo. Aqui é apenas um pouco disso para alguns casos especiais :

Se você tem que concatenar por exemplo duas listas e se você precisa de velocidade, considere o uso de rendimento . Claro que isto é muito menos flexível e confortável do que União ou Concat em Linq. Por isso, só faz sentido em casos especiais.

Esta propriedade, por exemplo, irá proporcionar o mesmo 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;
        }
    }
Respondeu 21/07/2014 em 10:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more