Tôi đang làm việc với DataTable và tôi cần phải chuyển đổi chúng sang định dạng tệp CSV. Hầu hết các bảng tôi đang làm việc có hơn 50.000 hồ sơ vì vậy tôi đang cố gắng giảm thiểu thời gian cần thiết để chuyển đổi chúng.Cách hiệu quả nhất để chuyển đổi một DataTable thành CSV
Đây là phương pháp hiện tại của tôi:
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ó cách nào tôi có thể nâng cao hiệu quả của phương pháp này? Tôi hoan nghênh mọi thay đổi và ý tưởng mà bạn có!
Vì mã của bạn đang hoạt động và bạn không gặp phải vấn đề với nó, có thể [Code Review] (http://codereview.stackexchange.com/) là nơi tốt hơn cho câu hỏi của bạn hơn StackOverflow. –
Tại sao bạn tải quá nhiều hàng ở địa điểm đầu tiên? Sẽ dễ dàng hơn khi sử dụng các công cụ của cơ sở dữ liệu (như SSIS trong SQL Server) để xuất dữ liệu sang CSV. Hoặc sử dụng DataReader để đọc dữ liệu ở chế độ firehose và ghi chúng vào một tệp. Tạo toàn bộ chuỗi trong bộ nhớ là * không * hiệu quả - hoặc sử dụng Write và WriteLine để viết chúng ra một tập tin. Hơn nữa, bạn có thể thay thế các kết nối lặp đi lặp lại với String.Join, mặc dù sử dụng 'Write' làm cho nó thừa một chút cũng như –
có thể trùng lặp của [Chuyển đổi DataTable thành luồng CSV] (http://stackoverflow.com/questions/888181/convert- datatable-to-csv-stream) –