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

时间:2015-09-29 19:10:05

标签: c# wcf testing

我正在尝试编写简单的客户端 - 服务器应用程序,它可以使用WCF使用100%的CPU。

程序正在发送10000次请求并正在接收字符串,如下例所示。我发送f9b6af85-8826-49c8-9524-39511f1a241a并收到"你好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;
        }

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

看一下我用来回答WCF performance, latency and scalability的示例程序。包含完整的命令行代码。

线程代码使用较旧的模式,因为它来自2011年。但它仍然可以完全消耗任何CPU。