我们目前将Silverlight 4与WCF服务一起使用,并尝试从服务中读取大量用户对象。在我们的代码中,生成700个对象大约需要0.5(或更少)秒,按层次结构排列(很多循环)。
Silverlight / WCF在localhost上传输数据大约需要4-5秒。
我已经在我的代码/服务调用中测量了时间,使用Fiddler查看数据(5MB!),当我尝试传递带有普通属性的简化对象(而不是嵌套列表等)时,它花费的少得多数据量很快非常 - 就像一秒钟。
我已经阅读了很多关于这个主题的文章 - 没有简单的方法,我能找到的最好的方法是从WCF方法返回byte [](并在单独的程序集中包含类型),或者高度手动的序列化程序(如protobuf)需要编写自定义属性等。
好的,我试过了。 protobuf-net非常难(在200个现有类中添加数字并不好玩),v2还没有到来,而binaryMessageEncoding将数据负载从5.5MB减少到4.5MB,而不是太多。
但是,我无法相信,是否有任何开箱即用的WCF / Silverlight解决方案可以传输大量数据?它不应该是企业解决方案的一个很好的现代技术吗?
如何告诉Silverlight / WCF在5秒内更快更小地传输数据,而不是5MB?我可以在配置中说:“使用小而快的序列化器”?
答案 0 :(得分:2)
我发现SharpSerializer软件包很容易用于Silverlight中的快速二进制serlization:http://www.sharpserializer.com/en/index.html。生成的序列化数据大小比使用DataContract序列化程序或其他基于文本的序列化程序小得多。
答案 1 :(得分:0)
IIS是否已启用压缩。这会影响CPU,你可能需要仔细检查silverlight是否尊重deflate http标头?