From 2d5da8ef4c3833211f9e7f51dfa576580933a812 Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 22 Aug 2026 00:55:08 +0500 Subject: [PATCH 1/2] Use SmallDictionary in PendingEvents --- src/Ramstack.HtmxToolkit/PendingEvents.cs | 26 ++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Ramstack.HtmxToolkit/PendingEvents.cs b/src/Ramstack.HtmxToolkit/PendingEvents.cs index 233f978..0179884 100644 --- a/src/Ramstack.HtmxToolkit/PendingEvents.cs +++ b/src/Ramstack.HtmxToolkit/PendingEvents.cs @@ -1,8 +1,8 @@ -using System.Runtime.InteropServices; using System.Text.Json; using Microsoft.AspNetCore.Http; +using Ramstack.HtmxToolkit.Collections; using Ramstack.HtmxToolkit.Internal; namespace Ramstack.HtmxToolkit; @@ -16,9 +16,9 @@ internal sealed class PendingEvents private const string ProxyEventName = "rs:events"; private readonly HttpResponse _response; - private Dictionary? _receive; - private Dictionary? _afterSwap; - private Dictionary? _afterSettle; + private SmallDictionary? _receive; + private SmallDictionary? _afterSwap; + private SmallDictionary? _afterSettle; /// /// Initializes a new instance of the class. @@ -37,9 +37,9 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionary _receive ??= new Dictionary(), - HtmxTriggerTiming.AfterSwap => _afterSwap ??= new Dictionary(), - _ => _afterSettle ??= new Dictionary() + HtmxTriggerTiming.Receive => _receive ??= new SmallDictionary(StringComparer.Ordinal), + HtmxTriggerTiming.AfterSwap => _afterSwap ??= new SmallDictionary(StringComparer.Ordinal), + _ => _afterSettle ??= new SmallDictionary(StringComparer.Ordinal) }; foreach (var (k, v) in events) @@ -47,9 +47,11 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionary> collection) - value = collection = []; + if (!current.TryGetValue(ProxyEventName, out var value) || value is not List> collection) + { + collection = []; + current[ProxyEventName] = collection; + } collection.Add(new KeyValuePair(k, v)); } @@ -79,7 +81,7 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionaryA dictionary containing event names as keys and event details as values. public void SetEvents(HtmxTriggerTiming timing, IReadOnlyDictionary events) { - var replacement = new Dictionary(events); + var replacement = new SmallDictionary(events, StringComparer.Ordinal); switch (timing) { case HtmxTriggerTiming.Receive: @@ -140,7 +142,7 @@ public static PendingEvents GetOrCreate(HttpResponse response) return pending; } - private void SetHeader(string name, Dictionary? events) + private void SetHeader(string name, SmallDictionary? events) { if (events is not null) _response.Headers[name] = JsonSerializer.Serialize(events, JsonOptions.CamelCase); From b37e88f6f7e1f72cbcf236c7c73c7aeb7c1b358d Mon Sep 17 00:00:00 2001 From: rameel Date: Sat, 22 Aug 2026 00:57:49 +0500 Subject: [PATCH 2/2] Clean up and formatting --- src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs b/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs index b297bc2..476f206 100644 --- a/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs +++ b/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs @@ -184,8 +184,8 @@ public void Clear() var count = _count; if (count != 0) Array.Clear(_items, 0, count); - } + _count = 0; }