Скорость обработки данных - C# (183555)
Формулировка задачи:
Добрый день, всем.
Прошу оказать помощь в вопросе оптимальной обработки данных в циклах. Ситуация следующая:
Программа должна получить данные из трех таблиц и создать четвертую. Вот такой код (сократил):
Имеем время выполнения порядка 15 минут.
Если закоментировать первый или второй цикл внутри foreach время обработки составит 10-15 секунд. Причем что первый, что второй отрабатывают по отдельности примерно одинаково по времени, хотя второй по количеству операций и числу строк в разы превышает первый.
Т.е. последовательно
foreach
цикл 1
запись в БД
foreach
цикл 2
запись в БД
время обработки данных составит секунд 25-30. Не могу понять, в чем в данном случае разница от реализации
foreach
{
цикл 1
цикл 2
}
запись в БД
Ведь по сути количество операций не меняется. Помогите разобраться.
P.S. Последовательный вариант не подходит, т.к. получается строки идентификатор+данные цикла1, а потом еще раз идентификатор+данные цикла2, а должно быть идентификатор+данные цикла1+данные цикла2.
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(); }
Решение задачи: «Скорость обработки данных»
textual
Листинг программы
_Summa_rashod = temp_FOT_analise[i].Summa_rashod.Value; _Truck = temp_FOT_analise[i].Truck_model; _klient = temp_FOT_analise[i].Klient;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д