Как увеличить быстродействие сравнения элементов класса? - C#
Формулировка задачи:
Есть два класса Helper и FileDB. Я создал также два списка
////////////
Мой алгоритм сравнения двух и выборки из двух списков работает корректно, однако быстродействие разочаровывает. Очень медленно циклы проходятся. 50к данных всеголишь
Листинг программы
- 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; }
- }
Листинг программы
- 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д