Limiti di dimensioni pratiche di un DataTable in c #

4

Devo interrogare un set di dati di grandi dimensioni (~ 500 MB) usando un sqlDataReader, ma devo salvare i dati in tre diversi formati. Invece di interrogare il database 3 volte sto pensando di salvare i dati su una tabella in memoria e quindi salvare i dati da lì.

C'è un limite pratico alla dimensione di una tabella in memoria? Qualche idea per un approccio migliore?

Grazie!

    
posta Adam Mendoza 06.07.2012 - 23:23
fonte

4 risposte

7

Per quanto riguarda l'approccio: che ne dici di costruire ciascuna delle tue tre uscite mentre esegui il looping sul lettore di dati una sola volta?

    
risposta data 06.07.2012 - 23:31
fonte
3

In base alla classe DataTable MSDN "Il numero massimo di righe che un DataTable può memorizzare è 16,777,216", sorprendentemente, la pagina non mostra limitazioni in termini di MB. Esistono problemi risolti in eccezione di memoria esaurita MSDN .

Se stai utilizzando Windows, è veloce e sicuro serializzare i dati in un file di qualsiasi tipo che scegli e quindi utilizzare il file generato come input per ciascuno dei tuoi 3 formati. Scrivere su un file è molto più sicuro e può permetterti di riavviare l'applicazione nel caso in cui fallisca durante una delle generazioni. Ti permetterebbe anche di eseguire la generazione dei tuoi 3 formati in parallelo, rendendo così l'applicazione molto più veloce e più affidabile.

L'approccio salva-su-file è affidabile e viene utilizzato nei progetti Data Mart su tutto il pianeta.

    
risposta data 07.07.2012 - 00:00
fonte
2

Non sono a conoscenza di limiti di dimensioni di memoria alle tabelle di dati: potrebbe raggiungere il limite di dimensioni del processo se si esegue comunque un processo a 32 bit (i 3 GB di memoria indirizzabile).

L'approccio (memorizzare nella cache i dati in una struttura in memoria come DataTable ) è valido e ha senso.

    
risposta data 06.07.2012 - 23:26
fonte
-2

SQL Server 2005 ha un limite di 1024 colonne per tabella base. Una tabella di dati dovrebbe essere in grado di acquisire almeno 1024 colonne di dati.

    
risposta data 19.11.2012 - 09:19
fonte

Leggi altre domande sui tag