我近日一直在处理我们WPF应用程序的问题,我想知道是否有人遇到过这个问题并能够帮忙解决?
问题似乎归结为客户端动态生成序列化器来处理Web方法调用中的类型。当该方法首次被调用时(即Web服务本身已经运行),可能需要花费8秒钟,随后的调用可能只需要20毫秒。在此延迟期间,客户端WPF进程的CPU占用率非常高。
当使用XmlSerializer时,有一种方法可以使用svcutil预先生成这些序列化程序集。当使用正常的WCF DataContractSerializer时(就像我们一样),似乎没有这个选项。
我的目标是能够预先为所有数据合同中的所有类型生成此程序集(总数很多),或者使用自定义进程替换此进程,并将数据以二进制格式传递(我们拥有这个Web服务/客户端的两端,都是.NET 4)。我已经使用了BinaryFormatter和GZip压缩,虽然这加速了数据传输,但它总是会被还原为XML,以便框架进行反序列化,因此问题仍然存在。
有什么想法吗?
DataMember
上设置了Order
属性,你就应该没问题了。不过我自己没有使用它(我从一开始就使用了protobuf)。 - Julien LebosquainProtoMember(n)
,这并不是必需的:DataMember(Order = n)
有同样的效果。至于“它是否真的会提高启动速度”,我不能保证任何事情,你可以在一个示例项目中试一试。 - Julien Lebosquain