通过serviceProxy进行第一次WCF调用的持久性是多少?

时间:2011-09-30 01:00:50

标签: .net wcf .net-4.0 protobuf-net

有很多类似的问题,但它们都涉及服务器端的缓慢 - 这都是关于客户端问题。

第一次通话需要900毫秒。 第二次通话需要20毫秒。

我缩小了第一次调用serviceProxy.Method()的速度。 Fiddler报告第一次通话的实际线路时间是16 ms。由于第二次调用速度非常快,因此我不得不得出结论,在第一次方法调用发生时会触发一些WCF客户端实例化代码。

事实:

  • 与服务器的连接通过wsHttpBinding
  • 进行
  • 使用Marc Gravell的Protobufs.NET库编码对象
  • 关于SO的问题确实解决了客户端问题,例如我的建议在后台线程上进行第一次调用,以便缓慢解决问题。然而,这是解决症状,而不是根本原因。

为什么减速发生在第一篇文章?

1 个答案:

答案 0 :(得分:2)

启动时常见的服务器缓慢是IIS应用程序池启动,但在您的问题中,您声明即使第一个请求是900毫秒,根据fiddler在服务器请求上只花费了16毫秒。如果这是真的,它表明客户端正在发生一些事情。

一种可能性是,一些序列化对象的客户端应用程序在运行时生成并编译这些数据类型的序列化代码,这可能导致启动性能降低

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

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

我不熟悉protobuffs,但编译序列化代码是折衷的,这使得第一次调用显着变慢,但后续调用更快。

不确定这是否是您的初始费用,但这是可能的。