У меня есть очень простой SortedSet с методом CompareTo, который сортирует на основе двух полей класса.Как это используется, эта коллекция может стать довольно большой (миллион + объектов) и растет и растет со временем.Я использовал простой метод Contains, чтобы определить, существует ли уже новое значение в коллекции ...
В качестве учебного упражнения я делаю некоторые тесты, используя Linq (который я довольно новичок) для достижениятот же эффект, и я уверен, что есть некоторое понимание Linq, которого мне не хватает, потому что я не могу удаленно приблизиться к той же производительности, и мне было интересно, может ли какой-нибудь гуру Linq дать мне указатель на то, что можно сделать, чтобы ускорить его.
Итак ... У объекта есть CompareTo, которое выглядит примерно так:
public int CompareTo(EntityHistoryChange other)
{
int recordIdComp = Recordid.CompareTo(other.Recordid);
int tableIdComp = Tablename.CompareTo(other.Tablename);
if (recordIdComp == 0 && tableIdComp == 0)
return 0;
else if (recordIdComp != 0)
return recordIdComp;
else
return tableIdComp;
}
Соответствующий запрос Linq для простого списка:
var handledChange = from thisChange in handledChanges
where thisChange.Recordid == recordId
&& thisChange.Tablename == tableName
select thisChange;
Полагаю, результатыМеня не должно удивлять ...
Linq Lookup on 18772 rows: 46 ms
SortSet Lookup on 18772 rows: 3 ms
Так что вопрос - что такое эквивалентный механизм LINQ?