gpt4 book ai didi

wpf - 首次使用 WPF 中的 WCF 非常慢

转载 作者:行者123 更新时间:2023-12-04 02:10:16 28 4
gpt4 key购买 nike

几天来,我一直在为我们的 WPF 应用程序问题而苦苦挣扎,我想知道是否有人以前遇到过这个问题并且可以提供帮助?
问题似乎归结为客户端生成“即时”序列化程序来处理该 Web 方法调用中的类型。当第一次调用该方法时(Web 服务本身已经在运行),它可能需要例如8 秒,后续调用可能需要例如20 毫秒。在此延迟期间,客户端 WPF 进程上的 CPU 非常高。

使用 XmlSerializer 时,有一种方法可以使用 svcutil 预先生成这些序列化程序程序集。当(就像我们一样)使用普通的 WCF DataContractSerializer 时,这个选项似乎不存在。

我想要的是能够为我的所有数据合约(很多)中的所有类型预先生成这个程序集,或者,用我可以编码并以二进制形式传递数据的自定义程序替换这个过程(我们拥有此 Web 服务/客户端的两端,它们都是 .NET 4)。我已经使用了 BinaryForamtter 和 GZip 压缩,虽然这加快了数据的传输,但它总是被恢复为 XML 以由框架反序列化,因此这个问题仍然存在。

有任何想法吗?

最佳答案

您可以使用二进制库,例如 protobuf-net ,这是相当快的,即使有初始启动成本,因为必须为每种类型生成代码,它仍然是 way better than DataContractSerializer or BinaryFormatter .您应该获得几秒钟的时间并获得整体更流畅的体验。可以是easily integrated with WCF .请记住,WCF 仍将检查您的各种契约(Contract)以生成正确的 WSDL 和各种元数据。

还有其他可能会减慢 WCF 启动速度的因素,例如确定默认 Web 代理。确保 useDefaultWebProxyfalse如果您没有任何用处,请在您的绑定(bind)配置中使用它。

尽管如此,您会发现无论您如何优化 WCF 启动通常都很慢。就个人而言,厌倦了在类似情况下与缓慢作斗争(我控制了两端,并且客户端是 WPF 应用程序),我干脆放弃了 WCF 并选择了 ServiceStack + protobuf 网。第一次调用从 2-3 秒缩短到 100 毫秒左右,所有后续的 HTTP 调用都是即时的。整体的用户体验有了很大的提升。请注意,我绝不隶属于 ServiceStack,这只是我的经验。

关于wpf - 首次使用 WPF 中的 WCF 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com