我正在尝试编写简单的客户端 - 服务器应用程序,它可以使用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;
}
答案 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。