Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# .NET jak snížit časovou náročnost

Ahoj,

mám kód, který "zamrzne" program, tedy asi se jedná o přílišnou časovou náročnost.
Jde o porovnávání docela rozsáhlých kolekcí.


 var NedostupneVyrobky = HlidaneVyrobkyList.Where(b => !vyrobkyVXML.Any(a => a.getCisloVyrobku() == b.getCisloVyrobku()));


            foreach (var nedostupnyVyrobek in NedostupneVyrobky)
            {
                if (nedostupnyVyrobek.getCisloVyrobku() == "")
                    continue;
                if (!(nedostupnyVyrobek.getCisloVyrobku()[0] >= 'A' && nedostupnyVyrobek.getCisloVyrobku()[0] <= 'Z') )
                {
                                  

                        log.Text = time.ToString(format) + ", Z feedu se_vytratil výrobek číslo: (" + nedostupnyVyrobek.getCisloVyrobku() + ")" + Environment.NewLine + log.Text;
                        zmena = true;
                      
                        int index = HlidaneVyrobkyList.FindIndex(f => f.getCisloVyrobku() == nedostupnyVyrobek.getCisloVyrobku());
                        HlidaneVyrobkyList[index].setMnozstviVyrobku("0");
                    
                }
            }


            var NedostupneVyrobky2 = HlidaneVyrobkyList.Where(b => !vyrobkyVXML2.Any(a => a.getCisloVyrobku() == b.getCisloVyrobku()));

            

            foreach (var nedostupnyVyrobek in NedostupneVyrobky2)
            {
                if (nedostupnyVyrobek.getCisloVyrobku() == "")
                    continue;
                if ((nedostupnyVyrobek.getCisloVyrobku()[0] >= 'A' && nedostupnyVyrobek.getCisloVyrobku()[0] <= 'Z'))
                {

                    log.Text = time.ToString(format) + ", Z feedu se_vytratil výrobek číslo: (" + nedostupnyVyrobek.getCisloVyrobku() + ")" + Environment.NewLine + log.Text;
                    zmena = true;
                   
                    int index = HlidaneVyrobkyList.FindIndex(f => f.getCisloVyrobku() == nedostupnyVyrobek.getCisloVyrobku());
                    HlidaneVyrobkyList[index].setMnozstviVyrobku("0");
                }
            }
Konkrétně první foreach to projde bez problému (cca 3s).
Na druhém to ale už zamrzne.

HlidaneVyrobkyList má 666 objektů.
vyrobkyVXML má 21000 objektů
vyrobkyVXML2 má 444 objektů

Dále kód

if((nedostupnyVyrobek.getCisloVyrobku()[0] >= 'A' && nedostupnyVyrobek.getCisloVyrobku()[0] <= 'Z'))
Selectuje pouze kody začínající písmenem a naopak, pokud je podmínka !invertována, tak kódy začínající číslem.

Vidí tam oko nějaké zkušeného dravce zádrhel?
Nevěřím, že tento počet může zamrznout program, protože foreach první by měl být náročnější, než ten druhý, který právě neprojde.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny