gpt4 book ai didi

c# - WCF 流式下载 - IIS 与控制台中托管的高 CPU 使用率

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:07 24 4
gpt4 key购买 nike

我看过一些看似相关的帖子,但没有提供解决方案(或对我的情况有帮助的解决方案):

CPU usage goes upto 75% while stream a 300 MB file using WCF service

High CPU load using WCF streaming

所以我希望有人能提供帮助。

我已经使用 .NET 4.5 组合了一个 WCF 服务,以方便上传和下载大文件(数百 MB 到 GB。)

我在没有安全性的 BasicHttpBinding 上使用“流式”传输模式。

一切正常,但是,我注意到在 IIS 中托管服务与在控制台应用程序中自托管服务的 CPU 利用率存在巨大差异。

在控制台应用程序中,利用率低于 20%,一旦在 IIS 中,利用率超过 80% - 这是单实例下载。

服务在两种情况下的配置方式相同,并且都在同一个盒子上运行。

我的绑定(bind)是这样配置的:

<binding name="UnsecuredStreamBinding"
receiveTimeout="00:30:00"
sendTimeout="00:30:00"
transferMode="Streamed"
maxReceivedMessageSize="53687091200" maxBufferSize="65536" /> <!--50GB-->

服务代码也很简单:

...
var fileStream = File.OpenRead(filename);
var size = fileStream.Length;

var response = new DownloadResponse
{
FileStream = fileStream,
Size = size,
};

return response;

DownloadResponse 定义为 MessageContract。

我几乎没有改变默认的 IIS 环境(Windows Server 2012 R2 上的 IIS 8.5)日志记录/诊断已关闭,因此不会增加开销。

这是我第一次涉足 Web 服务开发,所以我知道有很多我不知道的地方,我希望我遗漏了一些相当简单的东西,这些东西可以解释我在 CPU 利用率上的巨大差异'看见。

最佳答案

我终于弄清楚发生了什么......

在 IIS 8.5 控制面板的 IIS 部分下,有一个“压缩”功能。那里有 2 个默认选中的选项;

  • 启用动态内容压缩
  • 启用静态内容压缩

似乎“动态内容压缩”是罪魁祸首,取消选中此选项会导致与控制台应用程序类似的 CPU 利用率。

当重新选中此选项时,实际上会警告您它可能会导致更高的 CPU 使用率。

关于c# - WCF 流式下载 - IIS 与控制台中托管的高 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22998929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com