Неожиданное поведение с группами веб-соединений - PullRequest
0 голосов
/ 10 июня 2019

Я думал, что обнаружу, что 100 запросов к example.com, отправленных с общим именем группы соединений, приведут к более быстрому общему времени отклика, чем без этого.На самом деле кажется, что единственный фактор - это порядок выполнения звонков (собранные звонки, а затем звонки без объединения и наоборот).

using System;
using System.Diagnostics;
using System.Net;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;

public class WebRequestTests
{
    public WebRequestTests(ITestOutputHelper testOutputHelper) => _testOutputHelper = testOutputHelper;

    private readonly ITestOutputHelper _testOutputHelper;
    private const string CONNECTION_GROUP_NAME = nameof(CONNECTION_GROUP_NAME);

    private static TimeSpan Pooling(int numberOfRequests)
    {
        var requests = new WebRequest[numberOfRequests];
        var responses = new WebResponse[numberOfRequests];

        for (var i = 0; i < numberOfRequests; i++)
        {
            var request = WebRequest.Create("http://example.com");
            requests[i] = request;
        }

        var stopwatch = Stopwatch.StartNew();
        Parallel.For(0, numberOfRequests, i => { responses[i] = requests[i].GetResponse(); });
        stopwatch.Stop();
        return stopwatch.Elapsed;
    }

    private static TimeSpan NoPooling(int numberOfRequests)
    {
        var requests = new WebRequest[numberOfRequests];
        var responses = new WebResponse[numberOfRequests];

        for (var i = 0; i < numberOfRequests; i++)
        {
            var request = WebRequest.Create("http://example.com");
            request.ConnectionGroupName = CONNECTION_GROUP_NAME;

            requests[i] = request;
        }

        var stopwatch = Stopwatch.StartNew();
        Parallel.For(0, numberOfRequests, i => { responses[i] = requests[i].GetResponse(); });
        stopwatch.Stop();
        return stopwatch.Elapsed;
    }

    [Fact]
    public void ConnectionGroupPerformance()
    {
        const int numberOfRequests = 1000;
        _testOutputHelper.WriteLine($"Number of requests:  {numberOfRequests}");
        var poolingDuration = Pooling(numberOfRequests);

        var noPoolingDuration = NoPooling(numberOfRequests);
        var message = $"No Pooling {noPoolingDuration:g}, Pooling {poolingDuration:g}";

        _testOutputHelper.WriteLine(message);
        Assert.True(poolingDuration < noPoolingDuration, message);
    }
}

Я также пытался назначитьслучайное имя группы для соединений без пула в случае, если пустая строка / ноль считается именем группы.

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...