Pergunta

Existem implementaions IQueriable para LINQ para objetos que apresentam melhor desempenho do que o O default (n) linear desempenho da pesquisa que você começa quando chamando myEnumerable.AsQueriable ()?

Eu tive uma olhada http://www.codeplex.com/i4o/ que tem um melhor desempenho, mas parece confiar em usar métodos de extensão em IndexedCollection ao invés de fazer IndexedColleciton implementar IQueriable.

Estou ansioso para manter a minha interface retornando IQueriable como eu não quero que ninguém saiba se eles estão batendo um cache ou um db.

Foi útil?

Solução

Essencialmente, qualquer consulta de um recurso não-indexada (como uma lista ou IEnumerable) vai ser na melhor das hipóteses O (n) porque ele tem para percorrer cada item na lista para verificar a condição. Para obter um desempenho melhor do que O (n), você precisa olhar para indexar os dados de alguma forma.

Como você mencionou, você provavelmente vai querer olhar para uma biblioteca para embrulhar a criação desses índices, especialmente se você quiser apenas para expor IQueryable.

Se você estivesse interessado em uma forma mais manual de olhar para cima de dados com melhor desempenho, então eu sugiro olhar dicionários para fazer pesquisas eficientes por chave, ou, eventualmente, usando árvores-B se você precisa fazer consultas alcance. Aqui está posto um bom MSDN em dados estruturas, incluindo árvores-B se você estiver interessado na teoria por trás dele. Além disso, NGenerics pode ser um projeto interessante para olhar.

Outras dicas

Você pode querer ter um olhar para PLINQ http: // MSDN. microsoft.com/en-us/magazine/cc163329.aspx

Outra resposta poderia ser a de apoiá-la por uma base de dados objeto de memória como: db4o

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top