【问题标题】:Very slow first call to web service第一次调用 Web 服务非常慢
【发布时间】:2014-07-16 09:38:51
【问题描述】:

我有一个使用 Visual Studio 2010 用 C# .NET 3.5 编写的 Web 应用程序,它使用由 Websphere for z/OS 公开的 Web 服务。 Web 应用程序托管在 Windows Server 2008 64 位/IIS 7 上。对 WS 的第一次调用需要 155000 毫秒才能执行,但服务响应时间不到一秒(在服务器上验证)。随后对 WS 的调用大约需要 45 毫秒。在长时间运行期间,worker进程消耗所有cpu并分配超过2Gb的内存。当它响应时,分配的内存下降到 250 Mb,随后的调用需要大约 45 毫秒。这种行为不会发生在我的工作站(Windows 7 64 位)和带有 Windows Server 2003 32 位和 IIS 6 的服务器上。我还尝试生成没有效果的序列化器/反序列化器。有什么想法吗?

【问题讨论】:

  • 仪表。您首先必须了解发生了什么......
  • 我从 JAVA(和 C# 的行为可能类似)知道,当服务第一次运行时,必须生成实际的类,这意味着程序集已构建。这可能需要一些时间。因此,只要它不影响您在生产期间的响应时间,我就不会关心它。
  • 对我来说这是个问题。一段时间后问题再次出现,应用程序没有“受到刺激”,可能是在会话到期之后(我在 30 分钟后尝试过)。似乎垃圾收集器丢弃了一些东西,asp.net 必须重建这个东西。
  • 今天我将与微软工程师会面,尝试解决这个问题。但是,我不明白为什么在装有 Windows Server 2003/IIS6 的机器上不会出现同样的问题。我相信一切都归功于 Windows Server 2008/IIS7。

标签: c# asp.net .net web-services iis


【解决方案1】:

找了半天,发现这是64位环境的问题,微软知道这个问题。我没有得到 Microsoft 的解决方案的回复。经过长时间的搜索,我发现这篇文章XmlSerializer startup HUGE performance loss on 64bit systems 说要将此参数添加到 web.config:

<configuration>
  <system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="4"/>
    </switches>
  </system.diagnostics>
</configuration>

我测试了这个解决方案,反序列化肥皂流所需的时间已降至 2 秒。没那么糟糕。缺点是临时目录被临时文件淹没。 现在的问题是:为什么启用此开关时间会下降? 在不保留临时文件的情况下,我可以尝试其他一些开关吗?

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2012-02-17
    • 2014-02-15
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2021-02-01
    • 2017-01-24
    相关资源
    最近更新 更多