如何加速大对象图的序列化和传输; WCF 3.5& SL3

时间:2009-09-10 18:41:30

标签: wcf performance datacontractserializer transport

我有一个3.5 SP1项目,WCF服务仅限Silverlight 3客户端使用。由于业务需求,我们必须处理大型对象图,这些图通过WCF端的SQL Server进行水合,然后发送到Silverlight客户端。它们很深,你可能有一个具有两个集合属性的类,集合中的每个项目都包含集合。基本设计就是它的本质,我继承并且必须在短期内工作。我们说话有多大?一个序列化后具有250个项目的顶级集合示例是14mb,当使用无需修改(httpBinding和DataContractSerializer)时遇到线路。 250个项目很小,我们面临的要求要求我们能够处理10,000多件物品,因为我有限的数学技能超过500mb来拉线。在公园里没有散步 - 事实上 - 你可以在公园里散步,然后就可以走了。

因此我们正在考虑一些事情,一个是远离DataContractSerializer并使用XmlSerializer,因此我们可以将大量这些属性移动到属性中并减少有效负载大小。我们也在研究二进制Xml绑定。

我的问题是,你会怎么做? IIS压缩可以在这里发挥作用吗?离开DCS一个坏主意?有更好的技术吗?我没有桨吗?

2 个答案:

答案 0 :(得分:0)

你绝对需要一次性下载所有数据吗?如果这是一个Silverlight应用程序,我看不到你在物理上显示你描述的大小超过10,000(或甚至250)的记录。是否可以使用分页来减少通过线路传输的数据量?

您可以每页显示10-20条记录,而不是10,000+,因此系统只会根据具体情况查询10-20条记录。

根据您描述的要求,不确定这是否适合您,但这对我来说似乎是最明显的解决方案。


另外,为了略微帮助您提高性能,您是否确保serialization assemblies are being generated用于业务对象?这将至少优化代码的序列化/反序列化部分。它可能不会带来巨大的性能提升,但它会有所帮助。

答案 1 :(得分:0)

正如其他人所说,看看你是否需要传输这么多数据。

发送大量数据的最佳方法是使用流媒体,请参阅:

http://msdn.microsoft.com/en-us/library/ms733742.aspx