Silverlight/WCF应用程序突然传输非常慢
本文关键字:传输 非常 突然 应用程序 WCF Silverlight | 更新日期: 2023-09-27 18:03:29
我有一个Silverlight 4应用程序,它与WCF服务配合得很好。该应用程序通常运行良好,甚至对一些繁重的查询也有快速的响应时间。然而,最近,它变得相当慢,我很难排除原因。
我的数据库托管在远程服务器上。应用程序托管在同一台服务器上。以下是我注意到的:
-
当我在本地运行应用程序时,使用ASP。. NET作为我的服务器而不是IIS,我通过localhost访问网站,它访问远程数据库,速度很快。
-
当我在本地运行应用程序,但使用远程WCF服务而不是本地服务时,事情很慢
-
当我在web上运行应用程序时,(即远程应用程序,再次与数据库在同一台服务器上,因此它们彼此是本地的)应用程序很慢。这就是生产环境…
-
当我登录到服务器,并从服务器内点击网站,事情很快。
-
对数据库的查询速度很快。在数据库上手动运行查询,可以在一瞬间得到结果。
-
使用WCFTestClient并点击远程WCF服务也非常快,并且几乎可以立即返回。
最后,当我使用预期的本地机器通过web访问网站,从而访问数据库等设置时:
- 并不是所有的查询都以同样的方式反应。一些导致大量数据集的较重查询实际上具有较快的响应时间。一些简单的查询——没有join的直接SELECT语句,只生成1千字节的数据,需要更长的时间……大约30秒。有一些查询有时快,有时慢,但总是慢的查询是最糟糕的。
关于服务器:
服务器是一个专用服务器,我已经监控了CPU,它没有被任何东西占用。我用IIS 7,在Win Server 2K8和Sql Server 2K8上托管。在过去的几个星期里,唯一的变化就是一些Windows的更新,有人告诉我,他们做了一些防火墙的改变——这是我目前对原因的理论,但我不知道在这一点上还可以尝试什么,或者如何证明这是防火墙。
任何想法吗?
根据您的描述很难找出原因,我认为您应该通过记录数据库时间,WCF请求处理时间等来开始配置您的应用程序
一旦你得到数据,你就能找到真正的原因。这就是我们在产品上一直在做的事情。
如果让我猜的话,您正在经历网络延迟和非最佳数据库设计的组合。您描述的"小型"查询比产生大型结果集的查询花费的时间更长,这是一个典型的指标,您需要评估您的查询计划,并确保它们使用了正确的索引(您正在使用索引,对吗?)。
我怀疑整理你的数据库问题将解决你所经历的大量缓慢;将查询结果缓存在memcached或类似的东西中可以解决其余的大部分问题。
一般来说,WCF是我最后一个寻找性能问题的地方——过去每次我往那个方向走,问题最终都出在我们的代码上;对于它的大小,WCF表现得非常好。
很抱歉我不能更具体,但是性能问题是与应用程序相关的,我们这里没有太多的信息可以继续。
小提琴手。小提琴手是答案(通常结果也是如此)
如果你也遇到过类似的问题,希望我学到的能对你有所帮助。
我看到的是:
首先,当同时使用Chrome/IE分析器时,很明显是请求本身导致了延迟,而响应却相当快。
这导致我有两种可能性:服务器由于某些特定的配置而导致请求延迟,我在通过localhost运行时不会看到,或者请求本身有问题。
在使用Fiddler获得请求的完整视图后,很明显这是我发送的请求。我将其中一个对象作为参数传递给WCF服务,该对象具有一个属性,当序列化时,该属性相当于大约1兆字节的数据——而且这还是在启用gzip的情况下。最初这个对象是一个相当小的对象,但随着应用程序的增长,这个特定对象也在增长,导致突然变慢。
在某些调用中发生而在其他调用中没有发生的原因完全取决于将此对象作为形参的调用。
与通过本地主机相比,它发生在网络上的原因是,在网络上,你不可避免地要面对提供商的上传限制,以及一些跳转,直到你到达你的服务器,而不是从你的本地主机直接连接到你的数据库。
教训:总是传递你能逃脱的最少的信息。