From 6470ce21f3066fb4fef8c866dee45a58996e8273 Mon Sep 17 00:00:00 2001 From: henry Date: Fri, 9 May 2025 19:01:10 -0400 Subject: [PATCH] small optimization caching DateTime.UtcNow increase bulk test --- AccessQueueService/Services/AccessService.cs | 16 +++++++++------- AccessQueueServiceTests/AccessServiceTests.cs | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AccessQueueService/Services/AccessService.cs b/AccessQueueService/Services/AccessService.cs index dd9b042..5f49108 100644 --- a/AccessQueueService/Services/AccessService.cs +++ b/AccessQueueService/Services/AccessService.cs @@ -6,8 +6,8 @@ namespace AccessQueueService.Services { private readonly Dictionary _accessTickets = new(); private readonly Queue _accessQueue = new(); - private static SemaphoreSlim _queueLock = new(1, 1); - private IConfiguration _configuration; + private readonly SemaphoreSlim _queueLock = new(1, 1); + private readonly IConfiguration _configuration; private readonly int EXP_SECONDS; private readonly int ACT_SECONDS; private readonly int CAPACITY_LIMIT; @@ -104,7 +104,8 @@ namespace AccessQueueService.Services 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; foreach (var ticket in expiredTickets) { @@ -116,8 +117,9 @@ namespace AccessQueueService.Services private bool DidDequeueUntilFull() { - var activeCutoff = DateTime.UtcNow.AddSeconds(-ACT_SECONDS); - var numberOfActiveUsers = _accessTickets.Count(t => t.Value.ExpiresOn > DateTime.UtcNow && t.Value.LastActive > activeCutoff); + var now = DateTime.UtcNow; + var activeCutoff = now.AddSeconds(-ACT_SECONDS); + var numberOfActiveUsers = _accessTickets.Count(t => t.Value.ExpiresOn > now && t.Value.LastActive > activeCutoff); var openSpots = CAPACITY_LIMIT - numberOfActiveUsers; int filledSpots = 0; while (filledSpots < openSpots) @@ -132,8 +134,8 @@ namespace AccessQueueService.Services _accessTickets[nextUser.UserId] = new AccessTicket { UserId = nextUser.UserId, - ExpiresOn = DateTime.UtcNow.AddSeconds(EXP_SECONDS), - LastActive = DateTime.UtcNow + ExpiresOn = now.AddSeconds(EXP_SECONDS), + LastActive = now }; filledSpots++; } diff --git a/AccessQueueServiceTests/AccessServiceTests.cs b/AccessQueueServiceTests/AccessServiceTests.cs index a8dbbc5..c2f9b41 100644 --- a/AccessQueueServiceTests/AccessServiceTests.cs +++ b/AccessQueueServiceTests/AccessServiceTests.cs @@ -16,7 +16,7 @@ namespace AccessQueueServiceTests const int ACT_SECONDS = 1; const int ACT_MILLIS = 1000 * ACT_SECONDS; const int CAP_LIMIT = 5; - const int BULK_COUNT = 10000; + const int BULK_COUNT = 50000; private readonly AccessService _accessService; public AccessServiceTests()