带有ExecuteQuerySegmentedAsync函数的Parallel.Foreach没有提高性能(Asp.net核心)

时间:2018-04-22 13:05:12

标签: c# asp.net-core parallel-processing task-parallel-library azure-table-storage

从Azure表中获取具有不同条件条件的记录需要执行10次。我使用Parallel.Foreach方法并行执行ExecuteQuerySegmentedAsync。但无论有没有Parallel.Foreach,代码执行时间都是相同的。

以下是我使用的示例代码:

List<T> result = new List<T>();

var stopWatch = Stopwatch.StartNew();

Parallel.ForEach(List, (item) => // source collection
{
  var temp = filter(pos, item.no, table, from, till);
  if (temp != null) { result.AddRange(temp); }
});
stopWatch.Stop();
Console.WriteLine("thread", stopWatch.ElapsedMilliseconds);

public List<T> filterByTail(List<string> engPos, string tail, CloudTable table, string filterFromDate, string filterTillDate)
    {
        try
        { do
            {
                var queryResult = table.ExecuteQuerySegmentedAsync(rangeQuery, token, null, null).Result;
                dataset.AddRange(queryResult.Results);
                token = queryResult.ContinuationToken;
            }
            while (token != null);
return dataset;
}}

如何使用并行处理提高从Azure获取数据的性能?

1 个答案:

答案 0 :(得分:0)

我建议您查看此外部博客:https://martincarlsen.com/boost-your-azure-table-storage-performance/ 作者讨论了使用并行性提高性能,您已经提到过。他使用批处理和ExecuteBatchAsync的组合来实现更好的性能处理。 enter image description here