Pergunta

All,

Então eu tenho todas as minhas consultas seleção em LINQ to SQL convertidas para utilizar CompiledQueries para acelerar as coisas. Funciona muito bem até agora para instruções select, mas eu não tenho sido capaz de descobrir como pré-compilação de inserção, atualização ou instruções DELETE.

Com certeza, quando você está inserindo, deletando ou atualizando em LINQ to SQL, você tem que usar o modelo de objeto. Mas, obviamente, em algum lugar ao longo do caminho que gera uma consulta, que seria bom para pré-compilação e armazenar em um membro estático.

Isso é possível? Qual é o desempenho LINQ como para atualizações, exclusões e inserções quando não pré-compilados? Eu podia vê-lo sendo muito mais rápido do que os seleciona, porque o que eles fazem por baixo é muito mais simples e menos "dinâmico" ...

Foi útil?

Solução

Há uma grande diferença. LINQ to SQL SELECT consultas podem ser grandes árvores expressões complexas. Sua estes que podem levar algum tempo 'compilar'. Neste caso coalescentes para alguns T-SQL que pode ser executada contra um SQL Server. Portanto, faz sentido para armazenar em cache o resultado de uma operação para que ele possa ser reutilizado.

No entanto outra excluir, atualizar e inserir são operações simples que não necessitam de uma árvore de expressão a ser convertido em T-SQL (LINQ em si é tudo sobre a consulta). Sua apenas lamentável que fomos treinados para pensar em código SQL que executa essas outras operações como 'consultas', não estamos actuall pedir qualquer informação.

Estas operações só são definidas pelo DataContext não pelo LINQ, portanto, o código para executar essas funções já está compilado.

Outras dicas

Eu acho que dos três única inserção faria sentido para ser capaz de compilar e re-uso, pois de exclusão é trivialmente simples (DELETE FROM tabela onde Key ...) e UPDATE só actualiza os campos que foram alterados e assim varia de acordo atualização operação.

[) Amien

L2S usa "sp_executesql" para depois executá-lo pela primeira vez, será no cache de plano de execução do procedimento armazenado. corridas subsequentes (da mesma consulta - não mesmos parâmetros) irá reutilizar o plano compilado a partir do cache. Então, o que você está pedindo é automagicamente tratado pelo SQL Server 'nos bastidores'.

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