Což je rychlejší: Union nebo Concat?

Položena 26/08/2009 v 22:48
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
49

Union odstraní duplicity. Concat není.

Takže, které produkují různé výsledky, pokud zdroje buď obsahovat všechny položky společného, ​​nebo máte nějaké vnitřní duplikáty.

Pokud můžete zaručit, nejsou tam žádné duplikáty, nebo pokud existuje jen málo a nemusíte starat o tom mít je ve svém výstupu, bude Concat být rychlejší, protože není potřeba testovat každou hodnotu proti tomu, co již bylo přineslo.

Nicméně, pokud existuje mnoho duplikáty a nemusíte jim navíc zpracování v Unii, aby se odstranily napálí může být kompenzován úsporami v kódu, který spotřebuje výsledky.

Odpovězeno 26/08/2009 v 22:50
zdroj uživatelem

hlasů
9

Myslíte si jen o rychlost provádění? Jak dlouho trvá, než se dostanete na zpracování prvek, když ji přijmout?

Concatje jednodušší - není nutné provádět žádné zpracování sama, nebo se zmírnily výsledky, které to již vráceny. Nicméně, to bude produkovat lepší výsledky, pokud se vyskytnou nějaké prvky v průsečíku. Pokud bude trvat dlouhou dobu zpracování každého výsledku, Concatmůže skončit ve skutečnosti je pomalejší.

Odpovězeno 26/08/2009 v 22:51
zdroj uživatelem

hlasů
3

To, co bylo řečeno výše, je v pořádku. Zde je jen malý doplněk pro některé speciální případy :

Máte-li zřetězit například dva seznamy a pokud budete potřebovat plnou rychlost, zvažte použití výtěžku . Samozřejmě je to mnohem méně flexibilní a pohodlnější, než Unie nebo Concat v LINQ. Proto to má smysl pouze ve zvláštních případech.

Tato vlastnost například poskytne stejný jako List1.Concat (List2)

    public IEnumerable<MyObject> AllObjects
    {
        get
        {
            foreach (MyObject o1 in List1)
                yield return o1;

            foreach (MyObject o2 in List2)
                yield return o2;
        }
    }
Odpovězeno 21/07/2014 v 10:53
zdroj uživatelem

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