Estoy usando LINQ to Objects y me pregunto si es posible mejorar el rendimiento de mis consultas haciendo uso de un índice que tengo. Esto se explica mejor con un ejemplo. Imagine un tipo simple ...LINQ to Objects y performance mejorada con un índice?
public class Person
{
public int Age;
public string FirstName;
public string LastName;
}
Y una simple consulta que haría en contra de ella ...
List<Person> people = new List<Person>();
// 'people' populated with 50,000 instances...
var x = from t in people
where t.Age > 18 && t.Age < 21
select t;
Si entiendo LINQ a objetos correctamente, entonces la ejecución del método de extensión Cuando enumerará todas las 50,000 instancias en la colección de personas para encontrar las 100 que realmente coinciden. Da la casualidad que ya tengo un índice de la colección de personas ordenada por edad. Así ...
SortedList<int, Person> ageSorted = new SortedList<int, Person>();
Es evidente que tendría sentido si podía conseguir la Dónde utilizar SortedList de modo que ya no tiene que enumerar todos los 50.000 casos, en lugar de encontrar el rango de 100 entradas coincidentes y así ahorrar hora.
¿Es posible extender LINQ a Objetos para habilitar mi situación? ¿Ya es posible, pero me falta la técnica?
Gracias. Eso ciertamente hará el trabajo que esperaba lograr. –
@PhilWright, @JohnSkeet Hay un método 'List.BinarySearch' que se puede utilizar en el código anterior, con una ligera modificación de la firma del método. Por cierto, también hay una búsqueda binaria en la lista ordenada: 'SortedList.IndexOfKey'. –
BTW, 'List.BinarySearch' se puede usar para encontrar la coincidencia más cercana en caso de que la coincidencia exacta no exista. Curiosamente, el 'SortedList.IndexOfKey' no parece tener esta capacidad. –