Как увеличить быстродействие сравнения элементов класса? - 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);
}