

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.