通过C#WCF REST Web服务作为MemoryStream构建和发送非常大的CSV数据集

通过C#WCF REST Web服务作为MemoryStream构建和发送非常大的CSV数据集,c#,wcf,rest,csv,memorystream,C#,Wcf,Rest,Csv,Memorystream,本主题与此处的问题相关: 我能够通过使用中讨论的方法发送一个非常小的数据集,该方法解释了如何利用“原始”编程模型发送响应——我使用的是MemoryStream类 public Stream ReturnCSVSample() { string csv = "Hello, World\nGoodBye, For, Now\n"; byte[] csvBytes = Encoding.UTF8.GetBytes(csv); WebOperationContext.Curr

本主题与此处的问题相关:

我能够通过使用中讨论的方法发送一个非常小的数据集,该方法解释了如何利用“原始”编程模型发送响应——我使用的是MemoryStream类

public Stream ReturnCSVSample()
{
    string csv = "Hello, World\nGoodBye, For, Now\n";
    byte[] csvBytes = Encoding.UTF8.GetBytes(csv);

    WebOperationContext.Current.OutgoingResponse.ContentType = "text/csv";

    return new MemoryStream(csvBytes);
}
这个很好用。然而,实际上,我正在从一个两列宽的SQL数据库表中检索大约144000条记录,并使用字符串连接将其格式化为CSV。然后,我将这个字符串编码为字节数组,并将其作为MemoryStream对象返回。我让服务运行了20多分钟,但仍然没有完成!我已经确定瓶颈是字符串连接。为什么?因为我执行了检索这144000条记录并将其存储到我创建的类中的操作,最多需要几分钟才能完成

这样大的字符串效率低下,或者有更好的方法对我指定的记录量执行字符串连接

如何通过web服务发送CSV流,例如大型数据集

谢谢。

A
StreamWriter()
将比字符串串联做得更好:

public Stream LoadStreamSample(Stream ms)
{
    using (StreamWriter sw = new StreamWriter(ms, Encoding.UTF8)){
        // Call SQL and iterate over rows from SqlDataReader here...
        while (dr.Read()){
            // replace following with csv of one record
            string csv = "Hello, World\nGoodBye, For, Now\n";
            sw.WriteLine(csv)
        }
    }
    return ms;
}
StreamWriter()
比字符串串联做得更好:

public Stream LoadStreamSample(Stream ms)
{
    using (StreamWriter sw = new StreamWriter(ms, Encoding.UTF8)){
        // Call SQL and iterate over rows from SqlDataReader here...
        while (dr.Read()){
            // replace following with csv of one record
            string csv = "Hello, World\nGoodBye, For, Now\n";
            sw.WriteLine(csv)
        }
    }
    return ms;
}

非常感谢你。我正在查找字符串和StringBuilder之间的差异,似乎我应该使用StringBuilder来完成此任务。StreamWriter和StringBuilder之间的性能差异是什么?@user717236
StreamWriter
StringBuilder
没有直接的可比性。但是,
StringWriter
,它继承了
StreamWriter
,在内部使用了
StringBuilder
,所以差别很小。再见,非常感谢。我正在查找字符串和StringBuilder之间的差异,似乎我应该使用StringBuilder来完成此任务。StreamWriter和StringBuilder之间的性能差异是什么?@user717236
StreamWriter
StringBuilder
没有直接的可比性。但是,
StringWriter
,它继承了
StreamWriter
,在内部使用了
StringBuilder
,所以差别很小。您好,我还看到了您的另一个WCF rest服务CSV问题并进行了投票。为什么不使用
IDispatchMessageFormatter
方法?谢谢你,我还看到了你的另一个WCF rest服务CSV问题,并投了赞成票。为什么不使用
IDispatchMessageFormatter
方法?谢谢