【问题标题】:C# .net 2.0 webservice is slow at first callC# .net 2.0 webservice 在第一次调用时很慢
【发布时间】:2013-09-20 10:01:50
【问题描述】:

客户站点:Windows 窗体

服务器站点:.net 2.0 asmx。 IIS 7,赢得 2008 R2。

首次调用定义:IIS 已重新启动或应用程序池已回收。

对 IIS 中托管的 Web 服务的第一次调用总是很慢,大约需要 20 多秒。

后续调用很快,不到 1 秒。客户端应用程序的新实例也执行相同(快速)。

我在客户端 app.config 中设置了 useDefaultWebProxy = false, bypassProxyOnLocal = true,这是我从互联网上的各种来源了解到的。

我通过在客户端 PC 中运行客户端应用程序(第一次调用 web 服务)进行了测试,正如预期的那样,它很慢。然后我在服务器 PC 中运行客户端应用程序(第二次调用 web 服务),它很快。

反之亦然,如果客户端应用程序首先在服务器中执行(第一次调用,它很慢),那么第二次在客户端 PC 中运行客户端应用程序(第二次调用)会很快。

从上面的场景中,我想说网络代理可能不是这里的问题..

我在 Web 服务项目的属性中也将“Generete 序列化程序集”设置为 On。

还有什么可以改进的吗?

【问题讨论】:

  • 您可能需要预热(预加载)托管您的服务的 Web 应用程序。请参阅ASP.NET Performance Overview 中的 Web 应用程序部分。

标签: c# web-services


【解决方案1】:

可能有多种原因导致初始化缓慢。最值得注意的是:

  • 应用程序已准备好,如果存在任何模板,则缓存它们(这应该不是问题,除非您的项目中也有网页)
  • 其他库需要时间来初始化。特别是,查看数据库连接的性能。我想到了实体框架。首次运行查询时,编译、生成和缓存查询需要一些时间。后续查询速度更快。

如果您使用的是 EntityFramework,我唯一的建议是更新 Entity Framework 的版本,这将要求您也使用更新版本的 .NET。

【讨论】:

    【解决方案2】:

    对于第一个请求,IIS 必须唤醒(或初始化)某个进程来处理请求,这会导致第一次响应的时间很长。

    更简单且最常见的方法是第一次忍受,并定期 ping 您的站点以保持这些进程处于唤醒状态。我认为那里有一些不错的 Ping 服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 2012-01-27
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多