У меня есть DataTable
, который может содержать сотни тысяч записей. Это огромная нехватка памяти, поэтому я добавил функцию, благодаря которой пользователи могут визуализировать только 200 записей в моем приложении и могут экспортировать остальные результаты в файл CSV.Как работать с очень большими базами данных
Однако для экспорта в CSV-файл метод, который я использую, делает это путем преобразования содержимого файла DataTable
в файл CSV. Поскольку в DataTable у меня может быть более 100K записей, я думаю, что слишком большая часть памяти для размещения всех записей в DataTable и сопоставление с CSV-файлом. Какой подход был бы рекомендован? Это код моего CSV-кода:
StringBuilder builder = new StringBuilder();
IEnumerable<string> columnNames = dtResults.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
builder.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dtResults.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => DisplayCommas(field.ToString()));
builder.AppendLine(string.Join(",", fields));
}
File.WriteAllText(filename, builder.ToString());
сотни тысяч записей являются «умеренными»; не «очень большой». Это касается момента, когда вы начинаете понимать, что вам нужно делать такие вещи, как «сортировка и пейджинг на сервере», а не выбор всего в «DataTable». Какая база данных вы используете здесь? Используете ли вы «базу данных» и «CSV» как синонимы здесь? –
@MarcGravell - Пользователи могут применять мое приложение к любой базе данных по их выбору, поэтому теоретически она может быть такой же большой, как и самая большая доступная база данных (хотя таких случаев было бы очень мало). Пользователи могут использовать мое приложение для запроса своих баз данных и просматривать результаты их запроса в виде DataGrid, который создается из DataTable. Тем не менее я хотел бы экспортировать содержимое DataTable в CSV-файл, однако я беспокоюсь, что могут быть случаи, когда DataTable будет потреблять слишком много памяти –
; и по этой причине «DataTable» очень редко используется за пределами небольших приложений ... –