【问题标题】:WCF CPU usage increase by 25% for each client每个客户端的 WCF CPU 使用率增加 25%
【发布时间】:2012-04-24 15:53:11
【问题描述】:

正如标题所说,我得到了一个定义了此服务行为的 WCF 服务器:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

我使用命名管道绑定并且我的客户端以这种方式连接:

    NetNamedPipeBinding binding = new NetNamedPipeBinding();
const int maxValue = 0x40000000; // 1GB
binding.MaxBufferSize = maxValue; 
binding.MaxReceivedMessageSize = maxValue;

binding.ReaderQuotas.MaxArrayLength = maxValue;
binding.ReaderQuotas.MaxBytesPerRead = maxValue;
binding.ReaderQuotas.MaxStringContentLength = maxValue;

// receive timeout acts like a general timeout
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;

ChannelFactory<IDatabaseSession> pipeFactory = new ChannelFactory<IDatabaseSession>(binding, new EndpointAddress("net.pipe://localhost/DatabaseService"));

IDatabaseSession dbSession = pipeFactory.CreateChannel()

我启动的每个客户端都执行上面的代码,每个客户端的 CPU 使用率都会提高 25%(实际上不是针对 5. 客户端,但此时可执行的服务几乎覆盖了整个 CPU 容量的 100% )。

我正在寻找的是一种资源(网站/列表或只是您的强大知识)告诉我 CreateChannel 实际做了什么(关于资源分配问题)。

提示:即使没有实际进行通信,CPU 使用率也会增加,只是创建了 Channel。

【问题讨论】:

  • 我预测你有 4 个核心,并且有一些东西在一个紧密的循环中旋转。
  • 学习使用调试器和/或 CPU 分析器。
  • 其实你是对的 tzerb。 4 个核心,还有一些,目前还没有找到,微小的循环......

标签: c# .net wcf


【解决方案1】:

暂停调试器并查看所有线程已停止的位置。这可能是您的代码的热门部分。查看调用堆栈。

【讨论】:

    【解决方案2】:

    WCF 本身不太可能使用那么多资源,尤其是因为您说即使没有通信也会发生这种情况。我的猜测是这是服务的问题,而不是客户的问题。如果您有服务构造函数,请查看它。还可以尝试InstanceContextModeConcurrencyMode 的不同值。

    【讨论】:

    • 这是我的服务管理的dll有问题...实际上没有客户端问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多