提高向Web服务发出数千个请求的速度

时间:2018-02-06 19:53:24

标签: c#

我有20,000个产品,需要向Web服务发出2个请求才能返回一个URL。 如何提高拨打所有电话的速度?目前,我正在做类似的事情。

private async Task PopulateProductWithImagesAsync(IEnumerable<IProduct> products)
{
    int index = 0;
    int batchSize = 10;
    int productsCount = products.Count();
    var jobs = new List<Task<IMediaSet>>();

    while (index < productsCount)
    {
        jobs.Clear();

        var productsBatch = products.Skip(index).Take(batchSize);

        foreach (var product in productsBatch)
        {
            Task<IMediaSet> job = _scene7Repository.LoadImageUrlAsync(product.Scene7ImageSet); // Make call to get images urls
             jobs.Add(job);
        }

        await Task.WhenAll(jobs);

        index += batchSize;
    }
}

1 个答案:

答案 0 :(得分:1)

最好的改进通常是将批量操作作为一个请求处理。对20k产品进行一次操作比20k分离的Opeartions少得多。 Y +(20k乘X)&lt; 20k次(Y + X)。如果您控制了另一端,请添加批量函数。

我怀疑你的批处理是否有用。你真正做的就是在循环中添加一个循环。正确的批处理将使用批量方法,但一次限制为10。

多线程+任务:通常网络操作是I / O操作,因此多任务处理和线程不应该加速它们。然而,在实践中,Web服务器被设计为大规模并行,并且协议开销实际上可以是CPU相关的(在两侧)。因此多线程可以在某种程度上加速它。假设WebSerice端没有采取任何对策措施。