Estoy creando un método en C# que genera un archivo de texto para Google Product Feed. El feed contendrá más de 30,000 registros y el archivo de texto pesa actualmente a ~ 7Mb.¿Cómo escribir eficientemente un archivo de texto grande en C#?
Aquí está el código que estoy usando actualmente (algunas líneas se eliminan por motivos de brevedad).
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());
}
}
Me pregunto si StringBuilder es la herramienta adecuada para el trabajo. ¿Habría ganancias de rendimiento si usara un TextWriter en su lugar?
No conozco mucho sobre el rendimiento de IO, por lo que cualquier ayuda o mejora general sería apreciada. Gracias.
Desde el momento en que escribí esta pregunta, el proyecto Linq2Csv cobró vida. Es una forma mucho mejor de manejar el código que estaba escribiendo. http://nuget.org/packages/LinqToCsv – jessegavin
¿Algún código fuente completo con solución? – Kiquenet
Lo siento, fue escrito para uno de mis clientes. Deberías mirar realmente en Linq2Csv. Hará que este tipo de cosas sea mucho más fácil. – jessegavin