C# 平行班实验
我正在做一个涉及线程的实验,目前我正在使用并行类。我制作了一个获取数据的程序,我假设我们在不同的时间间隔中检索数据。如果我们要一个接一个地调用它们或同步调用它们,则经过的时间为9秒。但是如果我使用Parallel.Invoke,它可以节省时间(5秒),而且我认为效率更高,因为我们正在最大化服务器线程。我的问题是,这种方法好吗?还是有什么缺点?假设我对一个有20-30个用户(或更多)的web应用程序使用这种方法。(服务器应为平均规格或更低规格)C# 平行班实验,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我正在做一个涉及线程的实验,目前我正在使用并行类。我制作了一个获取数据的程序,我假设我们在不同的时间间隔中检索数据。如果我们要一个接一个地调用它们或同步调用它们,则经过的时间为9秒。但是如果我使用Parallel.Invoke,它可以节省时间(5秒),而且我认为效率更高,因为我们正在最大化服务器线程。我的问题是,这种方法好吗?还是有什么缺点?假设我对一个有20-30个用户(或更多)的web应用程序使用这种方法。(服务器应为平均规格或更低规格) 是的,当执行多个不受IO限制的操作(例如从另一个源获
是的,当执行多个不受IO限制的操作(例如从另一个源获取数据)时,线程是一种流行的技术。谢谢Rob。因此,在30多个用户同时调用该方法时,使用Parallel.Invoke是安全的。
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
bool output1 = false;
bool output2 = false;
bool output3 = false;
//9 seconds
//output1 = FetchData1();
//output2 = FetchData2();
//output3 = FetchData3();
Parallel.Invoke(() => output1 = FetchData1(), () => output2 = FetchData2(), () => output3 = FetchData3());
//Process(output1, output2, output3);
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Stop();
Console.ReadLine();
}
static bool FetchData1()
{
//db call
System.Threading.Thread.Sleep(5000);
Console.WriteLine("FetchData1");
return true;
}
static bool FetchData2()
{
//db call
System.Threading.Thread.Sleep(1000);
Console.WriteLine("FetchData2");
return true;
}
static bool FetchData3()
{
//db call
System.Threading.Thread.Sleep(3000);
Console.WriteLine("FetchData3");
return true;
}