最大化Parallel.For或Parallel.Foreach循环的使用

时间:2017-01-31 22:12:26

标签: c# multithreading performance parallel-processing parallel.foreach

我的小型控制台应用程序中有一个嵌套的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请求数量。

我在这里做错了什么?

0 个答案:

没有答案