C# Нужна помощь с ускорением кода

265
24 июня 2017, 10:00

Использую Syncfusion GridControl в качестве таблицы

            if (labelCard.Text.Length != 0)
        {
            for (var i = 1; i <= checkGrid.RowCount; i++)
            {
                for (var j = 1; j <= checkGrid.Model.ColCount; j++)
                {
                    //сверка со списком исключений
                    foreach (var a in noPromoList.Where(a => dbList.ContainsKey(a)))
                    {
                        dbList[a] = 0;
                    }
                    var art = checkGrid[i, 7].Text;
                    var val = 0;
                    if (dbList.ContainsKey(art))
                    {
                        val = dbList[art];
                    }
                    var del = (double)val / 5;
                    var total = Convert.ToInt32(Math.Truncate(del));
                    var part = Convert.ToInt32((del - total) * 5);
                    var podarok = total;
                    var sellCount = Convert.ToInt32(checkGrid[i, 2].CellValue);
                    //если больше 5 в позиции
                    if (result.ContainsKey(art) && result[art] >= 5)
                    {
                        if (sellCount <= total)
                        {
                            podarok = Convert.ToInt32(checkGrid[i, 2].CellValue);
                            part = Convert.ToInt32((del - podarok) * 5);
                        }
                        else
                        {
                            val = result[art] - total;
                            del = (double)val / 5;
                            total = Convert.ToInt32(Math.Truncate(del));
                            part = Convert.ToInt32((del - total) * 5);
                            podarok = total;
                        }
                        foreach (var a in noPromoList.Where(a => result.ContainsKey(a)))
                        {
                            result[a] = 0;
                        }
                        checkGrid[i, 5].CellValue = podarok;
                        checkGrid.RefreshRange(GridRangeInfo.Cell(i, 5));
                        checkGrid[i, 6].CellType = GridCellTypeName.FormulaCell;
                        checkGrid[i, 6].CellValue = "=" + "(" + checkGrid[i, 2].CellValue + "*" + checkGrid[i, 4].CellValue + ")-" + Convert.ToInt32(checkGrid[i, 4].CellValue) + "*" + checkGrid[i, 5].CellValue;
                        checkGrid.RefreshRange(GridRangeInfo.Cell(i, 6));
                        checkGrid[i, 6].ResetFormulaTag();
                        checkGrid[i, 8].CellValue = part;
                        checkGrid[i, 9].CellValue = podarok * Convert.ToInt32(checkGrid[i, 4].CellValue);
                        checkGrid.Refresh();
                    }
                    //если меньше 5 в позиции
                    else if (result.ContainsKey(art) && result[art] < 5)
                    {
                        if (Convert.ToInt32(checkGrid[i, 2].CellValue) < total) { total = Convert.ToInt32(checkGrid[i, 2].CellValue);}
                        part = Convert.ToInt32(checkGrid[i, 2].CellValue) + part;
                        checkGrid[i, 5].CellValue = 0;
                        checkGrid.RefreshRange(GridRangeInfo.Cell(i, 2));
                        checkGrid[i, 6].CellType = GridCellTypeName.FormulaCell;
                        checkGrid[i, 6].CellValue = "=" + "(" + checkGrid[i, 2].CellValue + "*" + checkGrid[i, 4].CellValue + ")-" + checkGrid[i, 5].CellValue;
                        checkGrid.RefreshRange(GridRangeInfo.Cell(i, 6));
                        checkGrid[i, 6].ResetFormulaTag();
                        checkGrid[i, 8].CellValue = part;
                        checkGrid[i, 9].CellValue = podarok * Convert.ToInt32(checkGrid[i, 4].CellValue);
                        checkGrid.Refresh();
                    }
                    //сверка со писком скидок
                    foreach (var newCost in from s in saleList where checkGrid[i, j].FormattedText == s let saleXml = XDocument.Load(@"../data/menu/sale.xml") from si in (from y in saleXml.Descendants("item").Where(a => (string)a.Attribute("article") == s) select y) let co = Convert.ToInt32(checkGrid[i, 4].FormattedText) let sa = Convert.ToInt32((string) si.Attribute("sale").Value) let price = Convert.ToInt32((string) si.Attribute("cost").Value) where co >= price let sel = (co * sa / 100) select (co - sel).ToString())
                    {
                        checkGrid[i, 4].CellValue = newCost;
                    }
                }
            }
        }
    }

Часть блока где "else if" (там где меньше чем 5) судя по таймингу тормозит пересчет. Буквально десять строк в таблице пересчитывает секунд 10. Может кто подскажет как данный код оптимизировать. Всем откликнувшимся (по делу), СПАСИБО!

READ ALSO
C# заполнение &lt;input&gt; html

C# заполнение <input> html

Здравствуйте!

278
Работа с WebBrowser замена HTML [требует правки]

Работа с WebBrowser замена HTML [требует правки]

Доброго времени сутокПодскажите, можно ли каким то образом, изменить HTML/CSS код страницы, к которой мы подключаемся? Чтобы например тот же yandex

224
Как вставить html строку в doc файл через Interop Office?

Как вставить html строку в doc файл через Interop Office?

У меня есть html строка, например:

281
Генерация proxy для wcf

Генерация proxy для wcf

В vs есть замечательная функция-это приконектится к веб-службе и сгенерировать все необходимое

226