Я думал, что обнаружу, что 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);
}
}
Я также пытался назначитьслучайное имя группы для соединений без пула в случае, если пустая строка / ноль считается именем группы.
Что мне здесь не хватает?