2010-09-07 170 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