From 6f0d575f8da3451ead6c51789eacf2cd3c59069b Mon Sep 17 00:00:00 2001 From: Weihan Li <7604648+WeihanLi@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:43:01 +0800 Subject: [PATCH 1/2] use Stopwatch.GetElapsedTime directly --- .../Concurrency/RedisConcurrencyRateLimiter.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/RedisRateLimiting/Concurrency/RedisConcurrencyRateLimiter.cs b/src/RedisRateLimiting/Concurrency/RedisConcurrencyRateLimiter.cs index 05ecf89..236c89b 100644 --- a/src/RedisRateLimiting/Concurrency/RedisConcurrencyRateLimiter.cs +++ b/src/RedisRateLimiting/Concurrency/RedisConcurrencyRateLimiter.cs @@ -11,8 +11,6 @@ namespace RedisRateLimiting { public class RedisConcurrencyRateLimiter : RateLimiter { - private static readonly double TickFrequency = (double)TimeSpan.TicksPerSecond / Stopwatch.Frequency; - private readonly RedisConcurrencyManager _redisManager; private readonly RedisConcurrencyRateLimiterOptions _options; private readonly ConcurrentQueue _queue = new(); @@ -28,7 +26,7 @@ public class RedisConcurrencyRateLimiter : RateLimiter public override TimeSpan? IdleDuration => Interlocked.CompareExchange(ref _activeRequestsCount, 0, 0) > 0 ? null - : new TimeSpan((long)((Stopwatch.GetTimestamp() - _idleSince) * TickFrequency)); + : Stopwatch.GetElapsedTime(_idleSince); public RedisConcurrencyRateLimiter(TKey partitionKey, RedisConcurrencyRateLimiterOptions options) { From ccb4dc669eea967498ec4e5bc1e5754715b4f34a Mon Sep 17 00:00:00 2001 From: Weihan Li <7604648+WeihanLi@users.noreply.github.com> Date: Wed, 23 Oct 2024 14:23:15 +0800 Subject: [PATCH 2/2] update more usage --- .../FixedWindow/RedisFixedWindowRateLimiter.cs | 4 +--- .../SlidingWindow/RedisSlidingWindowRateLimiter.cs | 4 +--- .../TokenBucket/RedisTokenBucketRateLimiter.cs | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/RedisRateLimiting/FixedWindow/RedisFixedWindowRateLimiter.cs b/src/RedisRateLimiting/FixedWindow/RedisFixedWindowRateLimiter.cs index c4aceb9..66bee3e 100644 --- a/src/RedisRateLimiting/FixedWindow/RedisFixedWindowRateLimiter.cs +++ b/src/RedisRateLimiting/FixedWindow/RedisFixedWindowRateLimiter.cs @@ -10,8 +10,6 @@ namespace RedisRateLimiting { public class RedisFixedWindowRateLimiter : RateLimiter { - private static readonly double TickFrequency = (double)TimeSpan.TicksPerSecond / Stopwatch.Frequency; - private readonly RedisFixedWindowManager _redisManager; private readonly RedisFixedWindowRateLimiterOptions _options; @@ -22,7 +20,7 @@ public class RedisFixedWindowRateLimiter : RateLimiter public override TimeSpan? IdleDuration => Interlocked.CompareExchange(ref _activeRequestsCount, 0, 0) > 0 ? null - : new TimeSpan((long)((Stopwatch.GetTimestamp() - _idleSince) * TickFrequency)); + : Stopwatch.GetElapsedTime(_idleSince); public RedisFixedWindowRateLimiter(TKey partitionKey, RedisFixedWindowRateLimiterOptions options) { diff --git a/src/RedisRateLimiting/SlidingWindow/RedisSlidingWindowRateLimiter.cs b/src/RedisRateLimiting/SlidingWindow/RedisSlidingWindowRateLimiter.cs index 7283a5a..8bf2a1f 100644 --- a/src/RedisRateLimiting/SlidingWindow/RedisSlidingWindowRateLimiter.cs +++ b/src/RedisRateLimiting/SlidingWindow/RedisSlidingWindowRateLimiter.cs @@ -10,8 +10,6 @@ namespace RedisRateLimiting { public class RedisSlidingWindowRateLimiter : RateLimiter { - private static readonly double TickFrequency = (double)TimeSpan.TicksPerSecond / Stopwatch.Frequency; - private readonly RedisSlidingWindowManager _redisManager; private readonly RedisSlidingWindowRateLimiterOptions _options; @@ -22,7 +20,7 @@ public class RedisSlidingWindowRateLimiter : RateLimiter public override TimeSpan? IdleDuration => Interlocked.CompareExchange(ref _activeRequestsCount, 0, 0) > 0 ? null - : new TimeSpan((long)((Stopwatch.GetTimestamp() - _idleSince) * TickFrequency)); + : Stopwatch.GetElapsedTime(_idleSince); public RedisSlidingWindowRateLimiter(TKey partitionKey, RedisSlidingWindowRateLimiterOptions options) { diff --git a/src/RedisRateLimiting/TokenBucket/RedisTokenBucketRateLimiter.cs b/src/RedisRateLimiting/TokenBucket/RedisTokenBucketRateLimiter.cs index 6ca2803..517eb15 100644 --- a/src/RedisRateLimiting/TokenBucket/RedisTokenBucketRateLimiter.cs +++ b/src/RedisRateLimiting/TokenBucket/RedisTokenBucketRateLimiter.cs @@ -10,8 +10,6 @@ namespace RedisRateLimiting { public class RedisTokenBucketRateLimiter : RateLimiter { - private static readonly double TickFrequency = (double)TimeSpan.TicksPerSecond / Stopwatch.Frequency; - private readonly RedisTokenBucketManager _redisManager; private readonly RedisTokenBucketRateLimiterOptions _options; @@ -22,7 +20,7 @@ public class RedisTokenBucketRateLimiter : RateLimiter public override TimeSpan? IdleDuration => Interlocked.CompareExchange(ref _activeRequestsCount, 0, 0) > 0 ? null - : new TimeSpan((long)((Stopwatch.GetTimestamp() - _idleSince) * TickFrequency)); + : Stopwatch.GetElapsedTime(_idleSince); public RedisTokenBucketRateLimiter(TKey partitionKey, RedisTokenBucketRateLimiterOptions options) {