small optimization caching DateTime.UtcNow

increase bulk test
This commit is contained in:
henry 2025-05-09 19:01:10 -04:00
parent 876d7e8b58
commit 6470ce21f3
2 changed files with 10 additions and 8 deletions

View File

@ -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++;
} }

View File

@ -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()