Domanda

Tutti,

Quindi ho convertito tutte le mie query selezionate in LINQ-to-SQL in CompiledQueries per velocizzare le cose. Finora funziona benissimo per le istruzioni selezionate, ma non sono stato in grado di capire come precompilare le istruzioni di inserimento, aggiornamento o eliminazione.

Concesso, quando si inserisce, si elimina o si aggiorna in LINQ-to-SQL, è necessario utilizzare il modello a oggetti. Ma ovviamente da qualche parte lungo la strada genera una query, che sarebbe bello pre-compilare e archiviare in un membro statico.

È possibile? Come sono le prestazioni LINQ per aggiornamenti, eliminazioni e inserimenti quando non sono precompilate? Ho potuto vedere che è molto più veloce di quanto selezioni, perché quello che fanno sotto è molto più semplice e meno & Quot; dinamico & Quot; ...

È stato utile?

Soluzione

C'è una grande differenza. Le query di selezione Linq-To-SQL possono essere alberi di espressioni complesse di grandi dimensioni. Sono questi che potrebbero richiedere un po 'di compilazione. In questo caso si fonde con alcuni T-SQL che possono essere eseguiti su un SQL Server. Quindi ha senso memorizzare nella cache il risultato di un'operazione in modo che possa essere riutilizzato.

Tuttavia, altre operazioni di eliminazione, aggiornamento e inserimento sono semplici operazioni che non richiedono la conversione di un albero delle espressioni in T-SQL (LINQ stesso si occupa solo di interrogare). È un peccato che siamo stati addestrati a pensare al codice SQL che esegue queste altre operazioni come "query", non stiamo effettivamente chiedendo alcuna informazione.

Queste operazioni sono definite solo da DataContext e non da LINQ, quindi il codice per eseguire queste funzioni è già compilato.

Altri suggerimenti

Penso che gli unici tre inserti avrebbero senso essere in grado di compilare e riutilizzare perché eliminare è banalmente semplice (ELIMINA DA Tabella DOVE Chiave ...) e AGGIORNA aggiorna solo i campi che sono cambiati e quindi varia per operazione di aggiornamento.

[) Amien

L2S utilizza " sp_executeSQL " quindi dopo averlo eseguito la prima volta sarà nella cache del piano di esecuzione della procedura memorizzata. Le esecuzioni successive (della stessa query, non degli stessi parametri) riutilizzeranno il piano compilato dalla cache. Quindi ciò che stai chiedendo è gestito automaticamente da SQL Server "dietro le quinte".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top