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

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

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

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

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

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

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


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

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

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