Ciao Andrea,
come funzionano gli ORM presenti in commercio?
quando fai qualche interrogazione eseguono il read ogni volta da db o hanno i dati in memoria?
Si, gli ORM tipicamente inviano una nuova query al database anche se l'utente dovesse richiedere nuovamente gli stessi dati (es. fa F5 per aggiornare la pagina).
Esistono progetti come
questo che ti consentono di configurare una cache di secondo livello, ovvero di conservare dei risultati in memoria affinché le successive richieste di pagina siano più veloci.
Attenzione perché questo approccio è un po' diverso dal tuo: in questo caso la query viene usata come "chiave" per accedere ad un set di risultati già pronto da restituire al client.
Nel tuo caso, invece, stai usando Linq to Objects per filtrare un'intera lista di risultati. Anche se è "veloce", non è propriamente efficiente perché una query Linq to Objects è costretta a scorrersi l'intero elenco ogni volta. Capisci che se i tuoi oggetti crescono di numero diventerà sempre meno efficiente scalabile come soluzione.
Un database, invece, è in grado di sfruttare indici per arrivare all'informazione desiderata in maniera molto più efficiente. Il divario nelle prestazioni, rispetto all'usare una cache in memoria, si assottiglierà se inizi ad usare dischi SSD oppure la modalità "memory optimized" di Sql Server 2014, di cui puoi leggere qui:
http://robtiffany.com/create-in-memory-database-tables-sql-server-2014/Valuta se fa al caso tuo.
Solitamente, se l'obiettivo è abbassare al massimo i tempi di risposta, si scelgono altre soluzioni, come usare la Cache di Output di ASP.NET, creare una versione denormalizzata del database per ogni vista della tua applicazione (per evitare Join) o delegare la ricerca a motori appositi come ElasticSearch. Ne abbiamo parlato qui, insieme ad un altro utente che aveva una situazione simile alla tua. La parte "interessante" si trova a pagina 2.
http://forum.aspitalia.com/forum/post/413555/Salvataggio-Dati-Temporanei.aspx?PageIndex=1Si tratta comunque di soluzioni che dovresti valutare per qualche centinaio o migliaio di utenti contemporanei connessi all'applicazione. Per numeri inferiori sarebbe meno apprezzabile l'apporto fornito da una cache o da un motore di ricerca dedicato (ponendo che le tue query al db siano ottimizzate).
ciao,
Moreno
Modificato da BrightSoul il 08 settembre 2016 19.25 -