我如何获得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;
}
尝试将一些线程排队,如下所示:
for (int cont = 0; cont < 100; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback((a) =>
{
while (true)
{
}
}));
}
把它放在你的请求上,它会增加你的内存使用。
看一下我用来回答WCF性能、延迟和可伸缩性的示例程序。包括完整的命令行代码。
线程代码使用较旧的模式,因为它是从2011年开始的。但是,它仍然可以完全占用任何CPU。