我如何获得100%的CPU饱和度与简单的WCF应用程序

本文关键字:简单 WCF 应用程序 饱和度 CPU 何获得 100% | 更新日期: 2023-09-27 18:15:22

我正在尝试使用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;
        }

我如何获得100%的CPU饱和度与简单的WCF应用程序

尝试将一些线程排队,如下所示:

for (int cont = 0; cont < 100; i++)
{
    ThreadPool.QueueUserWorkItem(new WaitCallback((a) =>
    {
        while (true) 
        { 
        }
    }));
}

把它放在你的请求上,它会增加你的内存使用。

看一下我用来回答WCF性能、延迟和可伸缩性的示例程序。包括完整的命令行代码。

线程代码使用较旧的模式,因为它是从2011年开始的。但是,它仍然可以完全占用任何CPU。