2010-09-07 171 views
1

我們目前使用Silverlight 4和WCF服務,並嘗試從服務中讀取大量的用戶對象。在我們的代碼中,生成700個對象需要大約0.5(或更少)的時間,按層次結構排列(很多循環)。Silverlight二進制/更快序列化

Silverlight/WCF需要4-5秒才能在localhost上傳遞該數據。

我在我的代碼/服務調用中測量了時序,使用Fiddler查看數據(5MBs!),並且當我嘗試傳遞帶簡單屬性(而不是嵌套列表等)的簡化對象時,更少的數據量,並很快,第二。我已經閱讀了很多關於這個主題的文章 - 沒有簡單的方法,我能找到的最好的方法是從WCF方法返回byte [](並且在單獨的程序集中有類型),或者高度手動的序列化程序(如protobuf )需要編寫自定義屬性等。

OK我試過那些。 protobuf-net非常困難(爲200個現有類添加數字並不好玩),並且v2還沒有出現,而binaryMessageEncoding將數據負載從5.5MB減少到了4.5MB,而不是太多。

但是,我不敢相信,是否有任何開箱即用的WCF/Silverlight解決方案來傳輸大量數據?它不應該是企業解決方案的一個不錯的現代技術嗎?

如何讓Silverlight/WCF在5秒內更快更小地流式傳輸數據,而不是5MB?我可以在配置中說:「使用小而快的串行器」?

回答

0

IIS是否啓用了壓縮功能。然而這會影響CPU,你可能需要仔細檢查silverlight是否尊重deflate http頭文件?

+0

正確的說,壓縮需要CPU - 更重要的是時間,以便總結WCF/Silverlight花費序列化對象數組的大時間 - 這是大部分時間需要花費的時間(因爲傳輸任何數量的數據本地主機上的速度很快)。 – queen3 2010-09-09 07:02:46

+0

我會建議分析該服務以查看實際所用時間。即使在本地主機上,您也有上限,並且tcpip.sys足夠智能以繞過NIC。 你使用什麼序列化器,使用二進制編碼器進行數據合同? – Sajay 2010-09-09 22:36:15