1

このトピックは、次の質問に関連しています。

C# WCF RESTful (つまり Web) サービスを使用して CSV ファイルを送信する方法は?

http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspxで説明されている方法を利用して、非常に小さなデータ セットを送信することができました。 「RAW」プログラミングモデルを利用して応答を送信する方法を説明しています-私は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 データベース テーブルから 2 列幅の約 144,000 レコードを取得し、文字列連結を使用して CSV にフォーマットしています。次に、この文字列をバイト配列としてエンコードし、MemoryStream オブジェクトとして返します。サービスを 20 分以上実行しましたが、まだ終了しません! ボトルネックは文字列の連結であると判断しました。なんで?これらの 144,000 レコードを取得して、作成したクラスに格納する操作を実行したため、完了するまでにせいぜい数分しかかかりませんでした。

大きな文字列は非効率的であるか、指定したレコードの量に対して文字列連結を実行するためのより良い方法があります。

大規模なデータ セットなどを含む Web サービスを介して CSV ストリームを送信するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

1

AStreamWriter()は、文字列連結よりも優れた仕事をします:

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;
}
于 2013-06-26T17:34:50.773 に答える