Pregunta

Hay IQueriable implementaions para linq to objects que se desempeñan mejor que el defecto O(n) lineal del rendimiento de la búsqueda que usted consigue cuando se llama a myEnumerable.AsQueriable()?

He echado un vistazo a http://www.codeplex.com/i4o/ cual tiene mejor rendimiento, pero parece que se basan en el uso de métodos de extensión en IndexedCollection en lugar de hacer IndexedColleciton implementar IQueriable.

Estoy dispuesto a mantener mi interfaz de regresar IQueriable<T> como no quiero que nadie para saber si se está alcanzando un caché o un db.

¿Fue útil?

Solución

Sí, cualquier consulta de un no-indexado de recursos (tales como una lista o un IEnumerable) va a ser en el mejor de O(n) porque tiene que iterar a través de cada elemento de la lista para comprobar la condición.Para lograr un mejor desempeño que O(n) usted necesita para buscar en la indexación de los datos en algún formulario.

Como usted ha mencionado, es probable que desee buscar en una biblioteca para envolver la creación de estos índices, especialmente si sólo desea exponer IQueryable < t>.

Si usted estuviera interesado en un manual de más manera de buscar los datos, con mejor rendimiento, entonces te sugiero buscar en los diccionarios para hacer eficientes las búsquedas por clave, o, posiblemente, el uso de árboles b si usted necesita para hacer las consultas de rango. He aquí una bonita MSDN post sobre las estructuras de datos, incluyendo árboles b si usted está interesado en la teoría detrás de ella.También, NGenerics podría ser un proyecto interesante para mirar.

Otros consejos

puede que desee echar un vistazo a plinq http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

Otra respuesta podría ser una copia de un objeto de memoria de la base de datos como: db4o

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top