【发布时间】:2009-04-09 07:18:02
【问题描述】:
我能否知道提高 .Net WCF 服务性能的方法? 现在它很慢,有时会被堵塞并最终停止响应。
【问题讨论】:
标签: wcf web-services soap
我能否知道提高 .Net WCF 服务性能的方法? 现在它很慢,有时会被堵塞并最终停止响应。
【问题讨论】:
标签: wcf web-services soap
您在服务类中使用了哪种 InstanceContextMode 和 ConcurrencyMode?p>
如果是 PerCall 实例,您可能需要检查是否可以减少为每个调用创建服务器实例的开销。
如果是单实例(单例)——你真的需要吗? :-) 尝试使用 PerCall。
马克
【讨论】:
那么,您要发送什么样的数据,以及通过什么绑定?
问题是请求的大小(带宽),还是请求的数量(延迟)。如果有延迟,那么只需发出更少但更大的请求;-p
对于带宽:如果您通过 http 发送二进制数据,您可以启用 MTOM - 这将为您节省几个字节。您可以在服务器上启用压缩支持,但这不能保证。
如果您使用.NET 到.NET,您可能需要考虑protobuf-net;这有用于交换格式化程序 (DataContractSerializer) 以使用谷歌的“协议缓冲区”二进制格式的 WCF 钩子,该格式非常小且快速。我可以根据要求就如何提供建议。
除此之外:发送更少的数据;-p
【讨论】:
您使用的是什么绑定?如果您使用的是 HTTP,则可以使用 TCP 获得更好的性能。
尽管瓶颈很可能在 WCF 管道中更高,并且可能在您的托管对象中。
我们需要有关您的 WCF 设置的更多详细信息才能提供很大帮助。
【讨论】:
您描述的症状可能是由任何原因引起的。您需要使用 JetBrain 的 dotTrace 或 Automated QA 的 AQTime 等分析器来缩小范围。
或者您可以通过检测您的代码(这是分析器为您执行的操作)以老式方式进行。在您的操作开始之前收集开始时间。完成后,从当前时间中减去开始时间以确定经过的时间,然后将其打印出来或记录下来或其他任何方式。围绕此操作调用的方法执行相同的操作。您将很快看到哪些方法花费的时间最长。然后,进入这些方法并做同样的事情,找出是什么让它们花这么长时间,等等。
【讨论】:
“提高我的 .Net WCF 服务的性能”——这是您所问的非常通用的术语,我们可以通过不同的方式来提高性能,同时您需要找到导致性能下降的方法,例如 WCF 方法中的数据库访问。
请尝试了解 WCF 中的可用功能,例如 oneWay WCF 方法,它将帮助您找到提高性能的方法。
谢谢 文卡特
【讨论】:
这是一篇包含来自真实生产系统的一些统计数据的文章,您可以使用这些数据来比较/基准测试您的性能。
【讨论】:
微软最近发布了一篇知识库文章:
这些问题包括:
应用程序崩溃
挂起
调用 WCF 服务时应用程序的一般性能。
【讨论】: