Silverlight / WCF应用程序突然转移得非常慢

时间:2011-07-26 18:13:28

标签: c# silverlight wcf iis

我有一个Silverlight 4应用程序,它可以在WCF服务中运行很多。该应用程序通常运行良好,响应时间快,即使是一些大量的查询。然而,最近,它变得非常缓慢,我很难排除原因。

我的数据库托管在远程服务器上。该应用程序托管在同一台服务器上。这就是我所说的:

  1. 当我在本地运行应用程序时,使用ASP.NET作为我的服务器而不是IIS,我通过localhost访问网站,该网站访问远程数据库,速度很快。

  2. 当我在本地运行应用程序但使用远程WCF服务而不是本地服务时,事情进展缓慢。

  3. 当我通过网络运行应用程序时(即远程应用程序,它再次与数据库位于同一服务器上,因此它们彼此是本地的)应用程序很慢。这几乎就是生产环境......

  4. 当我登录服务器并从服务器内点击网站时,情况很快。

  5. 对数据库的查询很快。手动运行数据库本身的查询,会在瞬间产生结果。

  6. 使用WCFTestClient并点击远程WCF服务也非常快,几乎可以立即转身。

  7. 最后,当我使用我的本地计算机的预期设置通过网络访问网站时,它会访问数据库,等等:

    1. 并非所有查询都以相同的方式做出反应。导致大数据集的一些较重的查询实际上具有快速响应时间。一些轻量级查询 - 没有JOINS的直接SELECT语句,只生成一千字节的数据,需要更长的时间......大约30秒。有些查询有时很快,有时很慢,但总是很慢的是最差的。
    2. 关于服务器:

      服务器是一个专用服务器,我监控了CPU并且它没有被任何东西征税。我在IIS 7,Win Server 2K8和Sql Server 2K8上托管。在过去的几周里,唯一改变的是一些Windows更新,我被一个人告知他们做了一些防火墙更改 - 这是我目前关于原因的理论,但我不知道还有什么可以尝试此时,或者如何证明它是防火墙..

      有什么想法吗?

3 个答案:

答案 0 :(得分:1)

根据您所描述的内容很难找出原因,我认为您应该通过记录数据库时间,WCF请求处理时间等来开始描述您的应用程序。

获得数据后,您可以找到真正的原因。这就是我们对产品的所作所为。

答案 1 :(得分:1)

如果我不得不猜测,您会遇到网络延迟和不太理想的数据库设计的组合。您对“小”查询的描述花费的时间长于产生大型结果集的查询,这是一个经典指标,您需要评估查询计划,并确保他们使用正确的索引( 使用索引,右?)。

我怀疑整理数据库问题可以解决您遇到的大量缓慢问题;在memcached或类似的东西中缓存查询结果将解决大部分其余问题。

一般来说,WCF是我寻找性能问题的最后一个地方 - 每次我过去都是这个方向,麻烦最终成为我们的代码; WCF的规模令人钦佩。

我很抱歉,我不能更具体,但性能问题是针对特定应用的,我们在这里没有太多信息可以继续。

答案 2 :(得分:0)

的Fiddler。提琴手是答案(因为它通常证明是。)

如果你遇到类似的问题,希望我所学到的东西可以提供帮助。

这就是我所看到的:

首先,当同时使用Chrome / IE Profiler时,很明显请求本身导致延迟,而响应非常快。

这引出了两条可能性:服务器导致请求滞后,因为我在通过localhost运行时看不到某些特定配置,或者请求本身有问题。

使用Fiddler获取请求的完整视图后,很明显这是我发送的请求。我作为参数传递给我的WCF服务的对象之一有一个属性,当序列化时,该属性大约为1兆字节的数据 - 并且启用了gzip。最初这个对象是一个相当小的对象,但随着应用程序的增长,这个特定对象也会增长,导致突然减速。

某些调用发生的原因而不是其他调用的原因完全取决于将此对象作为参数的调用。

在网络上发生这种情况时,与通过本地主机进行比较的原因是,在网络上,您不可避免地会遇到提供商的上传限制,以及在您点击服务器之前的一些跳数,而不是从本地主机直接连接到数据库。

课程:始终传输您可以获得的最少量信息。