我正在測試WCF併發性和實例化。對WCF服務的多個並行調用需要比單個調用更長的時間
有WCF服務:
public class Service1 : IService1
{
public string GetData(int value)
{
Thread.Sleep(1000);
return string.Format("You entered: {0}", value);
}
}
從我的形式應用我做調用此服務方法。當我打電話時,需要約1秒鐘。
private void single_Click(object sender, EventArgs e)
{
using (var service = new Service1Client())
{
var sw = new Stopwatch();
sw.Start();
service.GetData(1);
sw.Stop();
Debug.WriteLine(sw.Elapsed);
}
}
但是當我用任務多次調用它時,它需要aprox:調用次數* 1秒。
private void mult_Click(object sender, EventArgs e)
{
using (var service = new Service1Client())
{
var tasks = new List<Task<string>>();
for (var i = 0; i < 5; i++)
{
int p = i;
tasks.Add(Task.Factory.StartNew(() => service.GetData(p)));
}
var sw = new Stopwatch();
sw.Start();
Task.WaitAll(tasks.ToArray());
sw.Stop();
Debug.WriteLine(sw.Elapsed);
foreach (var task in tasks)
{
Debug.WriteLine(task.Result);
}
}
}
我嘗試實例化和併發(Instance mode = Per Call and Concurrency = Single
等)的全部9個組合
有趣的事情是,如果我的所有工作創造新的ServiceClient對象,它工作正常,但我不認爲這是正確的做法。我覺得必須有一些我錯過的東西。如果是這樣,你能告訴我什麼?
該死的你好:) – Dadroid