c# - StringBuilder 和 CommaDelimitedStringCollection 哪个更高效

标签 c# .net asp.net

我正在创建一个 CSV 文件,并且正在使用 StringBuilder,此时我来到了一个新类“CommaDelimitedStringCollection”。

谁能告诉我用哪个更好地写入文件数据。另外您对使用 TextWriter 有何看法。

谢谢

最佳答案

如果编写 CSV 是一项非常复杂的任务,我可能会依赖像 CommaDelimitedStringCollection 这样的帮助器。然而,它并不复杂,因此没有理由在这里引入额外的帮助器类以及相关的性能命中。

如果我出于某种原因需要在内存中构建一个字符串,例如实现一个通用的ToString()方法,我会使用StringBuilder而不是直接串联。但是,在本例中,您正在写入某种类型的流,因此您也不需要这个额外的步骤。

TextWriter是一个抽象类,但您想要其中的类的层次结构,特别是 StreamWriter 。该类有许多构造函数重载;如果您想写入本地文件,一个需要文件名,另一个需要 Stream对象,如果您想直接写入流(例如 ASP.NET 中的 Response.OutputStream)。

实际上,我在 Google 上进行了快速搜索,似乎没有任何实际实现 CSV 下载的好示例(如果您想要这样做的话),所以这里有一个:

void ExportCsvAttachment(IEnumerable<Customer> customers)
{
    Response.Clear();
    Response.ContentType = "text/plain";
    Response.AddHeader("Content-Disposition: attachment;filename=Customers.csv");
    using (StreamWriter writer = new StreamWriter(Response.OutputStream))
    {
        WriteCsv(writer, customers);
    }
    Response.End();
}

void WriteCsv(TextWriter writer, IEnumerable<Customer> customers)
{
    foreach (Customer cust in customers)
    {
        writer.Write(cust.ID);
        writer.Write(',');
        WriteCsvString(writer, cust.Name);
        writer.Write(',');
        WriteCsvString(writer, cust.PhoneNumber);
    }
}

void WriteCsvString(TextWriter writer, string s)
{
    writer.Write('"');
    writer.Write(s.Replace("\"", "\"\""));
    writer.Write('"');
}

这使用了 CSV 最常见的转义机制 - 字符串周围的引号,另一个引号作为转义字符。

如果您只想导出到本地文件,请删除所有 Response ExportCsvAttachment 中的行并使用 StreamWriter采用路径的构造函数。

关于c# - StringBuilder 和 CommaDelimitedStringCollection 哪个更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261397/

相关文章:

c# - 使用身份验证时,TFS WorkItemStore 在 ASP.NET MVC 应用程序中抛出 COMException

.net - 使用 Lucene 搜索电子邮件地址

c# - 上传文件 : This operation is not supported in the WCF Test Client Because it uses type ClientFileInfo

c# - Winform,鼠标点击弹出窗口

c# - 在本地 SQL Server 存储表的缓存拷贝

c# - 枚举失败 == 当通过反射检索值时

c# - 在 RESTful WebApi 请求上运行后台线程

c# - 在不重启应用程序的情况下处理 URL 协议(protocol)

c# - 当匿名用户调用时,Web 服务无法写入事件日志

c# - 就大小而言,最好的对称 .net 加密提供程序是什么?