簡體   English   中英

通過C#WCF REST Web服務作為MemoryStream構建和發送非常大的CSV數據集

[英]Building and sending very large CSV data-set over C# WCF REST Web Service as MemoryStream

本主題與這里的問題有關:

如何使用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數據庫表中檢索大約144,000條記錄,該表寬兩列,並使用字符串連接將其格式化為CSV。 然后,我將這個字符串編碼為一個字節數組,並將其作為MemoryStream對象返回。 我讓該服務運行了20分鍾以上,但仍然無法完成! 我確定了瓶頸是字符串串聯。 為什么? 因為我執行了檢索這144,000條記錄並將其存儲到我創建的類中的操作,所以最多只花了幾分鍾就完成了。

太大的字符串效率低下,或者有更好的方法對我指定的記錄數量執行字符串連接。

如何通過具有大量數據集的Web服務發送CSV流?

謝謝。

與字符串連接相比, 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM