У меня есть список из 1,5 миллионов записей. Мне нужно перебирать через этот список около 300 раз, чтобы вытащить определенные записи для выполнения вычислений. Я предположил, что преобразование моего списка в словарь . бы мои взгляды вверх быстрее во время итерацииБыстрая итерация словаря (строка, список>
моего список состоит из класса, как это:
class SummaryRecord
{
public int CalcData { get; set; }
public string Id2 { get; set; }
public string Id2 { get; set; }
}
Поскольку у меня есть 2 идентификаторов, которые делают запись уникальной, преобразовать мой список в словарь, как это :
Dictionary<string, SummaryRecord> dictSummaries = summaries.ToDictionary(
e => e.Id1 + "+" + e.Id2 + "+" + e.CalcData);
Затем я просматриваю дополнительный список из 300 пар идентификаторов, чтобы вытащить записи из большого списка.
foreach(var ids in listOfIds)
{
var filteredData = from d in dictSummaries
where
d.Key.Contains(ids.Id1 + "+" + ids.Id2)
select d;
//perform operation on filteredData here. This code is slow as well.
filteredData.Count()
}
Это, очевидно, не очень эффективно на основе того, что я вижу производительности мудры, как она занимает около 1 секунды (раз 300 секунд) для выполнения каждой итерации. Как ускорить процесс запроса записей?
Afaik словарь будет работать лучше на поисковых системах, но не гарантируется, что это делается итерациями ... –
Я ответил ниже. Но я хочу кое-что уточнить. Поскольку я вижу, что вы используете .Count(), ожидаете ли вы, что в словаре с одним и тем же ключом может быть более 1 записи? Потому что это невозможно и вызовет исключение, когда вы попробуете вторую вставку. –
Словарь будет медленнее итерации, чем «Список». Преимущество «Словаря» заключается в том, что, в общем, * вам совсем не нужно его повторять *, когда вы используете его правильно. Каковы * актуальные * требования вашей программы. – Servy