perf: in-place filtering in RateLimiter to reduce GC pressure

This commit is contained in:
Your Name
2026-05-11 12:23:43 +08:00
parent 000c82747c
commit a90c5dd6f3

View File

@@ -63,14 +63,15 @@ func (rl *RateLimiter) Allow(key string) bool {
sw.mu.Lock()
defer sw.mu.Unlock()
// Remove expired tokens
var valid []time.Time
// Remove expired tokens using in-place filtering to avoid GC pressure.
n := 0
for _, t := range sw.tokens {
if t.After(cutoff) {
valid = append(valid, t)
sw.tokens[n] = t
n++
}
}
sw.tokens = valid
sw.tokens = sw.tokens[:n]
if len(sw.tokens) >= rl.limit {
return false