我的小型控制台应用程序中有一个嵌套的Parallel.For和PLINQ语句结构,基本上执行网络绑定操作(执行http请求),如下所示:
从DB填充用户列表,然后我执行以下操作:
Parallel.For(0,users.count(), index=>{
// here I try to perform HTTP requests for multiple users
});
然后在这个for循环中,我执行一个plinq语句,通过HTTP请求获取该用户的信息。
所以现在我总共得到两个嵌套循环,如下所示:
Parallel.For(0,users.count(), index=>{
// Some stuff is done before the PLINQ statement is called...
newFilteredList.AsParallel().WithDegreeOfParallelism(60).ForAll(qqmethod =>
{
var xdocic = new XmlDocument();
xdocic.LoadXml(SendXMLRequestToEbay(null, null, qqmethod.ItemID, true, TotalDaysSinceLastUpdate.ToString(), null));
int TotalPages = 0;
if (xdocic.GetElementsByTagName("TotalNumberOfPages").Item(0) != null)
{
TotalPages = Convert.ToInt32(xdocic.GetElementsByTagName("TotalNumberOfPages").Item(0).InnerText);
}
if (TotalPages > 1)
{
for (int i = 1; i < TotalPages + 1; i++)
{
Products.Add(SendXMLRequestToEbay(null, null, qqmethod.ItemID, false, TotalDaysSinceLastUpdate.ToString(), i.ToString()));
}
}
else
{
Products.Add(SendXMLRequestToEbay(null, null, qqmethod.ItemID, false, TotalDaysSinceLastUpdate.ToString(), "1"));
}
});
});
我尝试使用外部for循环,就像常规循环一样,我注意到它的运行速度比这更快更好。
我担心的主要是我在运行这样的控制台应用程序时检查CPU的利用率,它总是在CPU总功率的0.5-3%附近......
因此,我尝试执行HTTP请求的方式如下:
一次15个用户*这15个用户的HTTP请求数量。
我在这里做错了什么?