0

我有一个 3.5 SP1 项目,WCF 服务仅限于 Silverlight 3 客户端使用。由于业务需求,我们必须使用大型对象图,这些对象图通过 WCF 端的 SQL Server 进行水合,然后发送到 Silverlight 客户端。它们很深,您可能有一个具有两个集合属性的类,并且集合中的每个项目内部都有集合。基本设计就是它,我继承的东西,必须在短期内工作。我们说的有多大?在不使用任何修改(httpBinding 和 DataContractSerializer)的情况下,一个包含 250 个项目的顶级集合示例是 14mb。250 个项目很小,我们面临的要求要求我们能够使用 10 个,鉴于我有限的数学技能,000 多个项目远远超过 500mb 可以拉过电线。不能在公园里散步——事实上——你可以在公园里散步,而这一切都在搅动。

所以我们正在考虑几件事,一是远离 DataContractSerializer 并使用 XmlSerializer,这样我们就可以将许多这些属性移动到属性中并减少有效负载大小。我们也在研究二进制 Xml 绑定。

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

4

2 回答 2

0

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

发送大量数据的最佳方式是使用流式传输,请参阅:

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

于 2009-09-14T07:51:06.057 回答
0

您是否绝对需要一次性提取所有数据?如果这是一个 Silverlight 应用程序,我看不到您实际显示 10,000 多条(甚至 250 条)您描述的大小的记录。是否可以使用分页来减少通过网络传输的数据量?

您可以每页显示 10-20 条记录,而不是超过 10,000 条记录,因此系统仅根据情况查询 10-20 条记录。

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


此外,为了稍微提高您的性能,您是否确保正在为您的业务对象生成序列化程序集?这将至少优化代码的序列化/反序列化部分。这可能不是一个巨大的性能提升,但它会有所帮助。

于 2009-09-10T18:49:28.623 回答