有很多类似的问题,但它们都处理服务器端的缓慢 – 这都是关于客户端问题.
第一次通话需要900ms.
第二次通话需要20毫秒.
我缩小了第一次调用serviceProxy.Method()的速度. Fiddler报告第一次通话的实际线路时间是16 ms.由于第二次调用的速度非常快,因此我不得不得出结论,在第一次方法调用发生时会触发一些WCF客户端实例化代码.
事实:
>通过wsHttpBinding与服务器建立连接
>使用Marc Gravell的Protobufs.NET库对象进行编码
>关于SO的问题确实可以解决客户端问题,例如我的建议在后台线程上进行第一次调用,以便减慢速度.然而,这是解决症状,而不是根本原因.
任何想法为什么减速发生在第一篇文章?
最佳答案 一个常见的服务器启动缓慢是IIS应用程序池旋转,但在你的问题中,你说,即使第一个请求是900毫秒,根据提琴手的服务器请求只花了16毫秒.如果这是真的,它表明客户端正在发生一些事情.
一种可能性是,一些序列化对象的客户端应用程序在运行时生成并编译这些数据类型的序列化代码,这可能导致启动性能降低
http://msdn.microsoft.com/en-us/library/aa751883.aspx
http://msdn.microsoft.com/en-us/library/ms733901.aspx
我不熟悉protobuffs,但编译序列化代码是折衷的,这使得第一次调用显着减慢但后续调用更快.
不确定这是否是您的初始成本,但这是可能的.