Скорость обработки данных - C# (183555)

Узнай цену своей работы

Формулировка задачи:

Добрый день, всем. Прошу оказать помощь в вопросе оптимальной обработки данных в циклах. Ситуация следующая: Программа должна получить данные из трех таблиц и создать четвертую. Вот такой код (сократил):
 list_ZNR_new = list_ZNR.Distinct().ToList(); // список идентификаторов примерно 7000 по количеству (из первой таблицы)

            foreach (Int32 c in list_ZNR_new)  // по каждому из идентефикаторов берем данные из двух других таблиц
            {
                
                /////////////////////// ПЕРВЫЙ ЦИКЛ
               
                for (int i = 0; i < temp_FOT_analise_count; i++ ) // вторая таблица - примерно тоже 7000 строк
                { 
 
                    if (c == temp_FOT_analise[i].Remont_num)
                    {
 
                             _Summa_mat = (Double)temp_FOT_analise[i].Summa_mat; // запись нужного значения из второй таблицы во временную переменную
                                               
                        break;
                    }
                  
                }
 
                ///////////////////////////////////////

                /////////////////////// ВТОРОЙ ЦИКЛ

                for (int j = 0; j < All; j++) // третья таблица - примерно 40000 строк
                {
                    
                    if (list_ZNR[j].Equals(c) && (list_Role[j].Contains("Продавец труд") || list_Role[j].Contains("Контракт труд")))
                    {
                        _FOT_prod_trud = _FOT_prod_trud + list_Bonus[j]; // запись нужного значения из третей таблицы во временную переменную
                        _davnost = list_Davnost[j];
                    }
                   
                  // ...... в цикле в разы больше операций чем во второй таблице
                   
                }
 
                //////////////////////////////////
                
                //// ФОРМИРОВАНИЕ КОНЕЧНОЙ ТАБЛИЦЫ ПО ПОЛУЧЕННЫМ ВЫШЕ ДАННЫМ
                
                FOT_analise Temp = new FOT_analise
                {
                    ID = key++,
 
                    // заполнение таблицы данными
                    
                };
 
                db.FOT_analise.InsertOnSubmit(Temp);

            }

          db.SubmitChanges();

        }
Имеем время выполнения порядка 15 минут. Если закоментировать первый или второй цикл внутри foreach время обработки составит 10-15 секунд. Причем что первый, что второй отрабатывают по отдельности примерно одинаково по времени, хотя второй по количеству операций и числу строк в разы превышает первый. Т.е. последовательно foreach цикл 1 запись в БД foreach цикл 2 запись в БД время обработки данных составит секунд 25-30. Не могу понять, в чем в данном случае разница от реализации foreach { цикл 1 цикл 2 } запись в БД Ведь по сути количество операций не меняется. Помогите разобраться. P.S. Последовательный вариант не подходит, т.к. получается строки идентификатор+данные цикла1, а потом еще раз идентификатор+данные цикла2, а должно быть идентификатор+данные цикла1+данные цикла2.

Решение задачи: «Скорость обработки данных»

textual
Листинг программы
_Summa_rashod = temp_FOT_analise[i].Summa_rashod.Value; 
 
     _Truck = temp_FOT_analise[i].Truck_model;
 
    _klient = temp_FOT_analise[i].Klient;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы