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

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

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

Добрый день, всем. Прошу оказать помощь в вопросе оптимальной обработки данных в циклах. Ситуация следующая: Программа должна получить данные из трех таблиц и создать четвертую. Вот такой код (сократил):
Листинг программы
  1. list_ZNR_new = list_ZNR.Distinct().ToList(); // список идентификаторов примерно 7000 по количеству (из первой таблицы)
  2.  
  3. foreach (Int32 c in list_ZNR_new) // по каждому из идентефикаторов берем данные из двух других таблиц
  4. {
  5. /////////////////////// ПЕРВЫЙ ЦИКЛ
  6. for (int i = 0; i < temp_FOT_analise_count; i++ ) // вторая таблица - примерно тоже 7000 строк
  7. {
  8. if (c == temp_FOT_analise[i].Remont_num)
  9. {
  10. _Summa_mat = (Double)temp_FOT_analise[i].Summa_mat; // запись нужного значения из второй таблицы во временную переменную
  11. break;
  12. }
  13. }
  14. ///////////////////////////////////////
  15.  
  16. /////////////////////// ВТОРОЙ ЦИКЛ
  17.  
  18. for (int j = 0; j < All; j++) // третья таблица - примерно 40000 строк
  19. {
  20. if (list_ZNR[j].Equals(c) && (list_Role[j].Contains("Продавец труд") || list_Role[j].Contains("Контракт труд")))
  21. {
  22. _FOT_prod_trud = _FOT_prod_trud + list_Bonus[j]; // запись нужного значения из третей таблицы во временную переменную
  23. _davnost = list_Davnost[j];
  24. }
  25. // ...... в цикле в разы больше операций чем во второй таблице
  26. }
  27. //////////////////////////////////
  28. //// ФОРМИРОВАНИЕ КОНЕЧНОЙ ТАБЛИЦЫ ПО ПОЛУЧЕННЫМ ВЫШЕ ДАННЫМ
  29. FOT_analise Temp = new FOT_analise
  30. {
  31. ID = key++,
  32. // заполнение таблицы данными
  33. };
  34. db.FOT_analise.InsertOnSubmit(Temp);
  35.  
  36. }
  37.  
  38. db.SubmitChanges();
  39.  
  40. }
Имеем время выполнения порядка 15 минут. Если закоментировать первый или второй цикл внутри foreach время обработки составит 10-15 секунд. Причем что первый, что второй отрабатывают по отдельности примерно одинаково по времени, хотя второй по количеству операций и числу строк в разы превышает первый. Т.е. последовательно foreach цикл 1 запись в БД foreach цикл 2 запись в БД время обработки данных составит секунд 25-30. Не могу понять, в чем в данном случае разница от реализации foreach { цикл 1 цикл 2 } запись в БД Ведь по сути количество операций не меняется. Помогите разобраться. P.S. Последовательный вариант не подходит, т.к. получается строки идентификатор+данные цикла1, а потом еще раз идентификатор+данные цикла2, а должно быть идентификатор+данные цикла1+данные цикла2.

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

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

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


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

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

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы