Prima di tutto, pensateci in questo modo: la visualizzazione di 1 milione di record non ha assolutamente senso per nessun utente. Quindi, devi pensare a ciò che l'utente si aspetta di vedere. Forse un riassunto ?! Forse impaginare i record in pagine di 25 o 50 o 100 record. Ciascuno di questi approcci non richiede di tenere in memoria 1 record M alla volta.
Inoltre, quando si esegue una query su un database SQL e si utilizza SqlDataReader, non si riceveranno tutti i record, ma il driver SQL invierà la query al server SQL, il server eseguirà la query, preparerà un set di risultati e creare un cursore forward-only sul server. Quindi il driver recupera un record alla volta, ogni volta che si chiama Read() su SqlDataReader. Il comportamento è molto simile se si utilizza LINQ to SQL che utilizza l'esecuzione posticipata. Il set di risultati non viene trasferito completamente finché (o meno) non si specifica specificamente ogni singola riga.
Quindi, una semplice query di impaginazione farà il trucco. O in altri casi una sorta di rapporto di sintesi che aggrega i dati da quei 1 milione di record di una o due pagine di dati rilevanti.
Ovviamente, se è necessario spostarsi avanti e indietro tra le pagine, è possibile che una sorta di memorizzazione nella cache abbia un senso, ma, ripensandoci, quanto spesso un utente desidera effettivamente sfogliare 1 milione di record, probabilmente mai.
Come ultima nota, se si implementa l'impaginazione, accertarsi che il metodo utilizzato per implementare l'impaginazione si basi sul server SQL che invia i dati una pagina alla volta e non legge tutti i 1 milione di record in ASP.NET e quindi impaginando la copia locale dei dati perché sarebbe molto inefficiente e lento. Ecco un esempio di una query di SQL Server che esegue l'impaginazione: SO Question #109232
fonte
2010-10-16 17:33:28
sto solo cercando di capire se ci sono abbastanza ore in un giorno per sfogliare un milione di righe di dati. Diciamo 40 righe per pagina quindi 25.000 pagine richieste, diciamo che 1 minuto di navigazione per pagina sarebbe 25.000 minuti o circa 17 giorni - eeeek –
Non ha senso visualizzare un milione di record se me lo chiedi. Qual è lo scenario qui? –
A parte, supponendo che i tuoi record abbiano una media di 150 byte (è come un nome, una breve descrizione, un paio di interi e un paio di bool). 1 milione di record sarebbe inferiore a 150 MB. Non proprio troppo da archiviare nella cache. Tuttavia, vale la pena notare che il server del database (probabilmente SQL Server) sta già eseguendo la memorizzazione nella cache. In effetti, se query simili sono comuni e si ha molta memoria, penso che sia possibile che l'intera tabella sia in memoria. – tster