【发布时间】:2026-01-26 03:15:01
【问题描述】:
我正在尝试编写简单的客户端-服务器应用程序,该应用程序可以使用 WCF 使用 100% 的 CPU。
程序正在发送 10000 次请求并正在接收字符串,如下例所示。我发送 f9b6af85-8826-49c8-9524-39511f1a241a 并接收“Hello f9b6af85-8826-49c8-9524-39511f1a241a”10000 次,我测量时间。我尝试将客户端数量从 2 个增加到 4 个,但 CPU 使用率为 30%。服务非常简单,它自托管在控制台应用程序中。客户端是 Web 表单应用程序。我需要建议:我应该怎么做才能获得 100% 的 CPU 使用率?我应该发送更多请求、增加客户数量、发送更大的消息还是做我缺少的其他事情?
服务:
public class HelloService : IHelloService
{
public string Hello(string name)
{
return "Hello " + name;
}
}
主持人:
class Program
{
static void Main()
{
using (ServiceHost host = new ServiceHost(typeof(HelloWcf.HelloService)))
{
host.Open();
Console.WriteLine("Host started @ " + DateTime.Now.ToString());
Console.ReadLine();
}
}
}
客户:
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
label1.Text = Guid.NewGuid().ToString();
var start = DateTime.Now.TimeOfDay;
HelloServiceReference.HelloServiceClient client;
for (int i = 0; i < 10000; i++)
{
label2.Text = string.Empty;
client = new HelloServiceReference.HelloServiceClient("NetTcpBinding_IHelloService");
label2.Text = client.Hello(label1.Text);
client.Close();
}
var end = DateTime.Now.TimeOfDay;
var totalTime = end - start;
label3.Text = string.Format("Total time of execution {0}", totalTime.ToString(@"mm\:ss\.ffff"));
button1.Enabled = true;
}
【问题讨论】:
-
很可能您的 CPU 没有固定,因为 I/O 是瓶颈。为了使 I/O 成为瓶颈,您必须在处理请求时执行更多 CPU 密集型操作。
-
做更多迭代?一次运行多个实例?
-
“我应该怎么做才能获得 100% 的 CPU 使用率” - 为什么?开发人员的目标是减少 CPU 使用率。
-
此应用程序用于验证目的。我尝试了更多迭代 100000,但 CPU 使用率几乎没有增加。 @adv12 我可以为 exp 做什么?做一些数学运算?我还关闭了 TCP 卸载。
-
如果它用于验证,我认为那么 30% 可能是你所能得到的。如果你坚持 100% 那么它更像是 CPU 基准测试工具。