Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

xuất dữ liệu có thể dữ liệu lớn sang tệp .csv trong các ứng dụng c # windows

Thay vì gọi StreamWriter.Write(..) mọi lúc, bạn có thể cân nhắc sử dụng StringBuilder . Nối tất cả các chuỗi vào Builder và chỉ ghi một lần vào đĩa !

string filePath = @"e:\temp\test.csv";
string delimiter = ",";

#region init DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("a", typeof(string)));
dt.Columns.Add(new DataColumn("b", typeof(string)));
dt.Columns.Add(new DataColumn("c", typeof(string)));
dt.Columns.Add(new DataColumn("d", typeof(string)));
dt.Columns.Add(new DataColumn("e", typeof(string)));
dt.Columns.Add(new DataColumn("f", typeof(string)));
dt.Columns.Add(new DataColumn("g", typeof(string)));
dt.Columns.Add(new DataColumn("h", typeof(string)));
dt.Columns.Add(new DataColumn("i", typeof(string)));
dt.Columns.Add(new DataColumn("j", typeof(string)));
dt.Columns.Add(new DataColumn("k", typeof(string)));
dt.Columns.Add(new DataColumn("l", typeof(string)));
dt.Columns.Add(new DataColumn("m", typeof(string)));
dt.Columns.Add(new DataColumn("n", typeof(string)));
dt.Columns.Add(new DataColumn("o", typeof(string)));
dt.Columns.Add(new DataColumn("p", typeof(string)));

for (int i = 0; i < 100000; i++)
{
    DataRow dr = dt.NewRow();
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        dr[j] = "test" + i + " " + j;
    }
    dt.Rows.Add(dr);
}
#endregion

Stopwatch sw = new Stopwatch();
sw.Start();
StringBuilder sb = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
    sb.AppendLine(string.Join(delimiter, dr.ItemArray));
}
File.WriteAllText(filePath, sb.ToString());
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadLine();

CHỈNH SỬA

100000 hàng khiến tôi mất 271 mili giây và tạo một tệp có dung lượng khoảng 18 MB

Như @aiodintsov đã chỉ ra, có thể / sẽ có vấn đề với việc sử dụng StringBuilder nếu có vài MB Dữ liệu. Vì vậy, tôi đã tạo một ví dụ theo nhận xét của anh ấy. Làm việc tốt cho tôi. Đã xuất 1 000 000 hàng trong vòng 2685 mili giây .

Stopwatch sw = new Stopwatch();
sw.Start();
using (StreamWriter swr = 
         new StreamWriter(File.Open(filePath, FileMode.CreateNew), Encoding.Default, 1000000))
         // change buffer size and Encoding to your needs
{
    foreach (DataRow dr in dt.Rows)
    {
        swr.WriteLine(string.Join(delimiter, dr.ItemArray));
    }
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấu hình của eclipselink + Spring MVC + MySql bằng cách sử dụng Cấu hình Java (Không có cấu hình XML)

  2. mysql sau khi chèn trình kích hoạt sẽ cập nhật cột của bảng khác

  3. Nhóm MySQL Theo với số N hàng đầu của mỗi loại

  4. Mật khẩu đăng nhập php_verify

  5. Có cần thiết phải viết ROLLBACK nếu các truy vấn không thành công không?