2016-07-21 49 views
0

我有一個奇怪的場景,清楚地說明我不瞭解WCF和我應該做的一樣好。從WCF返回50,000個實體的性能不佳

我列出了50 000條記錄並創建了我想返回到我的前端的「實體」。 整個過程需要2秒鐘才能完成。

但是,然後序列化啓動服務器端 - 我的「代碼」以外 - 但它只使用一個處理器序列化數據 - 這需要4分鐘?除了重寫「串列化」之外 - 還有哪些其他選項可用?

我使用BasicHttpChannel - 目前沒有安全性 - 編碼是默認的 - 不是MTOM。

任何建議將是偉大的 - 謝謝!

編輯:

我有一個簡單的負載調用,它返回一個POCO沒什麼特別的 - 只有數據 - 5個性能 - 所有字符串 - 一個長。

編輯: 澄清 - 通過WCF從前端加載數據直到數據(POCO's)再次到達「入口點」,返回「通話」需要2秒。
此後,我看到只有我的一個處理器在大約4分鐘內「飆升」到100% - 我認爲這是數據序列化返回的位置 - 我想知道WCF是否有一個選項允許更多處理器執行這項工作 - 或者是我唯一的選擇重寫OnSerializing?

+1

你的「實體」是什麼樣的?它們是否具有多重導航屬性(甚至可能是循環引用)的實體框架類,或精簡DTO幾乎沒有嵌套? – CodeCaster

+0

我們不可能只用這些信息來幫助你。你能提供[mcve]嗎?你的服務,操作和數據合同是什麼樣的?您是簡單的POCO還是其他?你提到「實體」。你在使用實體框架嗎?如果是這樣,什麼版本?你有沒有試過用'DataContractSerializer'替換'XmlSerializer'](https://msdn.microsoft.com/en-us/library/ms733901(v = vs.110).aspx)?如果是這樣,性能影響是什麼? – dbc

+0

是的 - 我有一個簡單的負載調用返回一個POCO(沒有特別的) - 只有數據 - 5個屬性 - 所有字符串 - 一個長。我只能說,如果序列化,我可以清楚地看到,我的10個CPU中只有一個以100%運行,而另一個在串行化數據時全部空閒 - 但實際的加載調用使用了所有處理器。 – d1trut5r

回答

-1

鏈接:Transfer large amount of data in WCF service

另一種可能性是,以減少其必須由WCF的服務序列化記錄的金額。您可以檢查自上次請求後記錄是否已更新,並只返回已更改爲前端的記錄。

+0

嗨 - 感謝您的反饋 - 不幸的是,情況 - 我們發生了50000個請求 - 我們需要處理這些請求.. 。 – d1trut5r

+0

你不應該發佈鏈接作爲答案,而是解釋在這個鏈接中正在討論的內容。這個特殊的鏈接解釋瞭如何從WCF發送大量的響應,而OP已經成功地做到了。 – CodeCaster