Tôi đang tạo phương thức trong C# tạo tệp văn bản cho số Google Product Feed. Nguồn cấp dữ liệu sẽ chứa tối đa 30.000 bản ghi và tệp văn bản hiện có trọng số là ~ 7Mb.Làm thế nào để ghi một tệp văn bản lớn vào C# một cách hiệu quả?
Đây là mã tôi hiện đang sử dụng (một số dòng được xóa vì mục đích ngắn gọn).
public static void GenerateTextFile(string filePath) {
var sb = new StringBuilder(1000);
sb.Append("availability").Append("\t");
sb.Append("condition").Append("\t");
sb.Append("description").Append("\t");
// repetitive code hidden for brevity ...
sb.Append(Environment.NewLine);
var items = inventoryRepo.GetItemsForSale();
foreach (var p in items) {
sb.Append("in stock").Append("\t");
sb.Append("used").Append("\t");
sb.Append(p.Description).Append("\t");
// repetitive code hidden for brevity ...
sb.AppendLine();
}
using (StreamWriter outfile = new StreamWriter(filePath)) {
result.Append("Writing text file to disk.").AppendLine();
outfile.Write(sb.ToString());
}
}
Tôi tự hỏi nếu StringBuilder là công cụ thích hợp cho công việc. Sẽ có hiệu suất đạt được nếu tôi sử dụng một TextWriter thay thế?
Tôi không biết nhiều về hiệu năng IO nên bất kỳ trợ giúp hoặc cải tiến chung nào đều sẽ được đánh giá cao. Cảm ơn.
Kể từ thời điểm tôi viết câu hỏi này, dự án Linq2Csv ra đời. Đó là cách tốt hơn để xử lý mã tôi đang viết. http://nuget.org/packages/LinqToCsv – jessegavin
bất kỳ mã nguồn đầy đủ nào có giải pháp? – Kiquenet
Xin lỗi, nó được viết cho một trong những khách hàng của tôi. Bạn thực sự nên nhìn vào Linq2Csv. Nó sẽ làm cho việc này trở nên dễ dàng hơn nhiều. – jessegavin