C# 对web服务的第一次调用非常慢

C# 对web服务的第一次调用非常慢,c#,asp.net,.net,web-services,iis,C#,Asp.net,.net,Web Services,Iis,我有一个使用Visual Studio 2010用C#.NET 3.5编写的web应用程序,它使用Websphere for z/OS公开的web服务。该web应用程序托管在Windows Server 2008 64位/IIS 7上。对WS的第一次调用需要155000毫秒才能执行,但服务在不到一秒钟内响应(在服务器上验证)。对WS的后续调用大约需要45毫秒。在长时间运行期间,工作进程消耗所有cpu并分配超过2Gb的内存。当它做出响应时,分配的内存将下降到250 Mb,随后的调用(如我所说)大约

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

过了很长时间,我发现这是一个与64位环境相关的问题,Microsoft知道这个问题。我没有得到微软的回应。经过长时间的搜索,我找到了这篇文章,上面说要将此参数添加到web.config:

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

我测试了这个解决方案,对soap流进行反序列化所需的时间已下降到2秒。还不错。缺点是临时目录被临时文件淹没。 现在的问题是:为什么在时间下降时启用此开关?
我还可以尝试其他一些开关,而不必保留临时文件?

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