Как увеличить быстродействие сравнения элементов класса? - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д