Sto lavorando con DataTable e ho bisogno di convertirli in un formato di file CSV. La maggior parte delle tabelle con cui lavoro ha oltre 50.000 record, quindi sto cercando di ridurre al minimo il tempo necessario per convertirli.Il modo più efficiente di convertire un DataTable in CSV
Ecco il mio attuale metodo:
public static string table_to_csv(DataTable table)
{
string file = "";
foreach (DataColumn col in table.Columns)
file = string.Concat(file, col.ColumnName, ",");
file = file.Remove(file.LastIndexOf(','), 1);
file = string.Concat(file, "\r\n");
foreach (DataRow row in table.Rows)
{
foreach (object item in row.ItemArray)
file = string.Concat(file, item.ToString(), ",");
file = file.Remove(file.LastIndexOf(','), 1);
file = string.Concat(file, "\r\n");
}
return file;
}
C'è un modo per migliorare l'efficienza di questo metodo? Sono il benvenuto a tutte le modifiche e idee che hai!
Dal momento che il codice sta funzionando e non si sta affrontando i problemi con esso, forse [Code Review] (http://codereview.stackexchange.com/) è posto migliore per la vostra domanda di StackOverflow. –
Perché stai caricando così tante righe in primo luogo? Sarebbe più semplice utilizzare gli strumenti del database (come SSIS in SQL Server) per esportare i dati in CSV. Oppure utilizzare un DataReader per leggere i dati in modalità Firehose e scriverli in un file. La creazione dell'intera stringa in memoria è * non * efficiente - usa Write e WriteLine per scriverli su un file. Inoltre, è possibile sostituire le concatenazioni ripetute con String.Join, anche se l'utilizzo di 'Write' lo rende un po 'ridondante, come pure –
possibile duplicato di [Converti DataTable in flusso CSV] (http://stackoverflow.com/questions/888181/convert- datatable-to-csv-stream) –