Как увеличить быстродействие сравнения элементов класса? - C#

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

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

Есть два класса Helper и FileDB. Я создал также два списка
Листинг программы
  1. List<FileDB> listFileDB = new List<FileDB>();
  2. List<Helper> listHelper = new List<Helper>();
Листинг программы
  1. сlass Helper
  2. {
  3. public string Articule { get; set; }
  4. public List<Date> Dates { get; set; } = new List<Date>();
  5. }
  6. class Date
  7. {
  8. public DateTime Data { get; set; }
  9. public string Cnt { get; set; }
  10. }
////////////
Листинг программы
  1. class FileDB
  2. {
  3. public string Articule { get; set; }
  4. public string Naim { get; set; }
  5. public string Cnt { get; set; }
  6. }
Мой алгоритм сравнения двух и выборки из двух списков работает корректно, однако быстродействие разочаровывает. Очень медленно циклы проходятся. 50к данных всеголишь
Листинг программы
  1. for (int i = 0; i < listHelper.Count; i++) {
  2. bool flag = false;
  3. for (int j = 0; j < listFileDB.Count; j++) {
  4. if (listHelper[i].Articule == listFileDB[j].Articule) {
  5. flag = true;
  6. Date date = new Date();
  7. date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
  8. date.Cnt = listFileDB[j].Cnt;
  9. listHelper[i].Dates.Add(date);
  10. }
  11. }
  12. if (flag == false) {
  13. Date date = new Date();
  14. date.Data = Convert.ToDateTime(Path.GetFileNameWithoutExtension(file));
  15. date.Cnt = "0";
  16. listHelper[i].Dates.Add(date);
  17. }
  18. }

Решение задачи: «Как увеличить быстродействие сравнения элементов класса?»

textual
Листинг программы
  1.         static int ParseInt(string str)
  2.         {
  3.             // Для увеличения производительности используется эта функция (с отрицательными значениями проблема, но по условиям задачи их быть не может), вместо int.Parse.
  4.             int result = 0;
  5.             for (int i = 0; i < str.Length; i++)
  6.                 result = result*10 + (str[i] - '0');
  7.             return result;
  8.         }
  9.         static DateTime ParseDate(string str)
  10.         {
  11.             // Из-за того, что формат даты известен, эта функция работает быстрее, чем аналогичные методы DateTime.
  12.             //                  00000000001111111111222
  13.             //                  01234567890123456789012
  14.             //                  dd.MM.yyyy HH:mm:ss.fff
  15.             int day =   ParseInt(str.Substring(0, 2));
  16.             int month = ParseInt(str.Substring(3, 2));
  17.             int year =  ParseInt(str.Substring(6, 4));
  18.             int hour =  ParseInt(str.Substring(11, 2));
  19.             int min =   ParseInt(str.Substring(14, 2));
  20.             int sec =   ParseInt(str.Substring(17, 2));
  21.             int milsec= ParseInt(str.Substring(20, 3));
  22.             return new DateTime(year, month, day, hour, min, sec, milsec);
  23.  
  24.         }

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


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

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

9   голосов , оценка 4.222 из 5

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

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

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