Sim*_*ans 11 wpf performance wcf startup datacontractserializer
我一直在为我们的WPF应用程序遇到问题而苦苦挣扎几天,我想知道是否有人之前遇到过这个问题并且可以提供帮助?问题似乎归结为客户端生成"即时"序列化程序来处理该Web方法调用中的类型.当第一次调用该方法时(Web服务本身已经运行),可能需要8秒,后续调用可能需要20ms.在此延迟期间,客户端WPF进程上的CPU为v.
使用XmlSerializer时,有一种方法可以使用svcutil预生成这些序列化程序集.当(正如我们)使用普通的WCF DataContractSerializer时,此选项似乎不存在.
我想要的是能够为我的所有数据合同(很多)中的所有类型预生成此程序集,或者替换为使用我可以编码的自定义程序替换此过程并以二进制形式传递数据(我们拥有这个webservice/client的两端,它们都是.NET 4).我已经使用了BinaryForamtter和GZip压缩,虽然这加速了数据的传输,但它总是被恢复为XML以被框架反序列化,因此这个问题依然存在.
有任何想法吗?
你可以使用像protobuf-net这样的二进制库,这个版本非常快,即使有初始启动成本,因为必须为每种类型生成代码,它仍然比DataContractSerializer或更好BinaryFormatter.您应该获得几秒钟,并获得整体更顺畅的体验.它可以很容易地与WCF集成.请记住,WCF仍将检查您的各种合同,以生成正确的WSDL和各种元数据.
还有其他因素可能会降低WCF启动速度,例如确定默认Web代理.确保useDefaultWebProxy为false您绑定的配置,如果你没有它的任何使用.
不过,无论你采取什么措施来优化它,你都会发现WCF启动通常很慢.就个人而言,厌倦了类似场景中的缓慢战斗(我控制了两端,客户端是一个WPF应用程序),我只是放弃了WCF并去了ServiceStack + protobuf-net.第一个呼叫从2-3秒到大约100毫秒,所有后续的HTTP呼叫都是即时的.整体用户体验有了很大改善.请注意,我与ServiceStack没有任何关系,这只是我的经验.
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |