small optimization caching DateTime.UtcNow
increase bulk test
This commit is contained in:
parent
876d7e8b58
commit
6470ce21f3
|
@ -6,8 +6,8 @@ namespace AccessQueueService.Services
|
||||||
{
|
{
|
||||||
private readonly Dictionary<Guid, AccessTicket> _accessTickets = new();
|
private readonly Dictionary<Guid, AccessTicket> _accessTickets = new();
|
||||||
private readonly Queue<AccessTicket> _accessQueue = new();
|
private readonly Queue<AccessTicket> _accessQueue = new();
|
||||||
private static SemaphoreSlim _queueLock = new(1, 1);
|
private readonly SemaphoreSlim _queueLock = new(1, 1);
|
||||||
private IConfiguration _configuration;
|
private readonly IConfiguration _configuration;
|
||||||
private readonly int EXP_SECONDS;
|
private readonly int EXP_SECONDS;
|
||||||
private readonly int ACT_SECONDS;
|
private readonly int ACT_SECONDS;
|
||||||
private readonly int CAPACITY_LIMIT;
|
private readonly int CAPACITY_LIMIT;
|
||||||
|
@ -104,7 +104,8 @@ namespace AccessQueueService.Services
|
||||||
|
|
||||||
public int DeleteExpiredTickets()
|
public int DeleteExpiredTickets()
|
||||||
{
|
{
|
||||||
var expiredTickets = _accessTickets.Where(t => t.Value.ExpiresOn < DateTime.UtcNow);
|
var now = DateTime.UtcNow;
|
||||||
|
var expiredTickets = _accessTickets.Where(t => t.Value.ExpiresOn < now);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
foreach (var ticket in expiredTickets)
|
foreach (var ticket in expiredTickets)
|
||||||
{
|
{
|
||||||
|
@ -116,8 +117,9 @@ namespace AccessQueueService.Services
|
||||||
|
|
||||||
private bool DidDequeueUntilFull()
|
private bool DidDequeueUntilFull()
|
||||||
{
|
{
|
||||||
var activeCutoff = DateTime.UtcNow.AddSeconds(-ACT_SECONDS);
|
var now = DateTime.UtcNow;
|
||||||
var numberOfActiveUsers = _accessTickets.Count(t => t.Value.ExpiresOn > DateTime.UtcNow && t.Value.LastActive > activeCutoff);
|
var activeCutoff = now.AddSeconds(-ACT_SECONDS);
|
||||||
|
var numberOfActiveUsers = _accessTickets.Count(t => t.Value.ExpiresOn > now && t.Value.LastActive > activeCutoff);
|
||||||
var openSpots = CAPACITY_LIMIT - numberOfActiveUsers;
|
var openSpots = CAPACITY_LIMIT - numberOfActiveUsers;
|
||||||
int filledSpots = 0;
|
int filledSpots = 0;
|
||||||
while (filledSpots < openSpots)
|
while (filledSpots < openSpots)
|
||||||
|
@ -132,8 +134,8 @@ namespace AccessQueueService.Services
|
||||||
_accessTickets[nextUser.UserId] = new AccessTicket
|
_accessTickets[nextUser.UserId] = new AccessTicket
|
||||||
{
|
{
|
||||||
UserId = nextUser.UserId,
|
UserId = nextUser.UserId,
|
||||||
ExpiresOn = DateTime.UtcNow.AddSeconds(EXP_SECONDS),
|
ExpiresOn = now.AddSeconds(EXP_SECONDS),
|
||||||
LastActive = DateTime.UtcNow
|
LastActive = now
|
||||||
};
|
};
|
||||||
filledSpots++;
|
filledSpots++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace AccessQueueServiceTests
|
||||||
const int ACT_SECONDS = 1;
|
const int ACT_SECONDS = 1;
|
||||||
const int ACT_MILLIS = 1000 * ACT_SECONDS;
|
const int ACT_MILLIS = 1000 * ACT_SECONDS;
|
||||||
const int CAP_LIMIT = 5;
|
const int CAP_LIMIT = 5;
|
||||||
const int BULK_COUNT = 10000;
|
const int BULK_COUNT = 50000;
|
||||||
private readonly AccessService _accessService;
|
private readonly AccessService _accessService;
|
||||||
|
|
||||||
public AccessServiceTests()
|
public AccessServiceTests()
|
||||||
|
|
Loading…
Reference in New Issue