Я пытается ускорить следующий LINQ запрос объекта:Ускорение LINQ Объект запроса
var setOfCodes = codeList1
.SelectMany(q => q.Codes)
.Union(codeList2.SelectMany(q => q.Codes)
.Union(codeList3.SelectMany(q => q.Codes)
.ToList();
Где
codeListX is a List<Item>
и
public Item {
public List<int> Codes = new List<int>();
}
Пример:
var codeList1 = new List<Item> {
new Item {
Codes = new List<int> {
100,
105,
110
}
},
new Item {
Codes = new List<int> {
100,
110,
115
}
},
};
var codeList2 = new List<Item> {
new Item {
Codes = new List<int> {
150,
155,
160
}
},
new Item {
Codes = new List<int> {
150,
155,
170
}
},
};
И вывод должен быть (не хлопотал о порядке, я могу сортировать позже):
100, 105, 110, 115, 150, 155, 160, 170
IE: выводит список, содержащий все коды, которые появляются в пределах codeListX
годов.
Есть ли более быстрый способ сделать это?
Две точки ... один, это было бы очень хорошо, если бы вы по крайней мере, после компилируемый код, задавая вопрос. Это гораздо более внимательно. Во-вторых, что заставляет вас думать, что это медленно? Вы его профилировали? Что было бы так быстро? –
@DavidL Извините, код здесь - упрощенная версия того, что я на самом деле использую. Что касается того, почему он медленный, эти 'codeListsX', когда сплющены, содержат ~ 10-100 кодов в день в диапазоне дат. По мере того, как диапазон дат увеличивается, время, в течение которого этот код возвращается, увеличивается. Я искал ускорение этого. Для справки, около 500 кодов занимает 1 секунду в моей системе dev, чтобы создать уникальный список. – JosephGarrone
Упрощенный в порядке. Невозможно скомпрометировать не :). Настоящим виновником здесь является союз. Избегая этого, как и в ответе Xiaoy ниже, намного эффективнее, поскольку вам больше не нужно производить продукт из все большего числа наборов. –