From 7a548e9f3af76f77b28e0064a123e97d7bee55de Mon Sep 17 00:00:00 2001 From: Ard van der Marel <109339598+Ard2025@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:09:46 +0200 Subject: [PATCH 1/3] Reduce memory useage on serializing --- Magic.IndexedDb/Models/MagicContractResolver.cs | 3 ++- TestWasm/Pages/Home.razor | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Magic.IndexedDb/Models/MagicContractResolver.cs b/Magic.IndexedDb/Models/MagicContractResolver.cs index 38de04b..4e71656 100644 --- a/Magic.IndexedDb/Models/MagicContractResolver.cs +++ b/Magic.IndexedDb/Models/MagicContractResolver.cs @@ -374,7 +374,8 @@ private void WriteSimpleType(Utf8JsonWriter writer, object value) switch (value) { case string str: - writer.WriteStringValue(str); + str = str.Replace("\"", "\\\""); + writer.WriteRawValue("\"" + str + "\"", true); break; case bool b: writer.WriteBooleanValue(b); diff --git a/TestWasm/Pages/Home.razor b/TestWasm/Pages/Home.razor index 396097c..339b8b8 100644 --- a/TestWasm/Pages/Home.razor +++ b/TestWasm/Pages/Home.razor @@ -234,7 +234,7 @@ IndexOrderingProperties = new List> { Person[] persons = new Person[] { - new Person { Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, + new Person { Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead, Secret = new String('a', 45000000)}, new Person { Name = "Luna", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "Jerry is my husband and I had an affair with Bob.", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, new Person { Name = "Jerry", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, new Person { Name = "Jamie", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, From 399c1d3a0586811a547fcfdfe11148fb36312288 Mon Sep 17 00:00:00 2001 From: Ard van der Marel <109339598+Ard2025@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:11:59 +0200 Subject: [PATCH 2/3] update server test to test memory 45MB --- TestBase/Data/PersonData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestBase/Data/PersonData.cs b/TestBase/Data/PersonData.cs index 256a244..a963b50 100644 --- a/TestBase/Data/PersonData.cs +++ b/TestBase/Data/PersonData.cs @@ -6,7 +6,7 @@ public static class PersonData { public static Person[] persons = [ - new Person { _Id = 1, Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, + new Person { _Id = 1, Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead, Secret = new String('a', 45000000)}, new Person { _Id = 2, Name = "Luna", TestInt = 9, DateOfBirth = new DateTime(1980, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "Jerry is my husband and I had an affair with Bob.", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, new Person { _Id = 3, Name = "Jerry", TestInt = 9, DateOfBirth = new DateTime(1981, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, new Person { _Id = 4, Name = "Jamie", TestInt = 9, DateOfBirth = new DateTime(1982, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, From a6c0ddb9073698de754fab243a18de8ef92d74ba Mon Sep 17 00:00:00 2001 From: Ard van der Marel <109339598+Ard2025@users.noreply.github.com> Date: Sun, 5 Oct 2025 21:41:55 +0200 Subject: [PATCH 3/3] Andisposing the responseStream correctly --- Magic.IndexedDb/Extensions/MagicJsInvoke.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Magic.IndexedDb/Extensions/MagicJsInvoke.cs b/Magic.IndexedDb/Extensions/MagicJsInvoke.cs index cf6eaf3..abe9e4f 100644 --- a/Magic.IndexedDb/Extensions/MagicJsInvoke.cs +++ b/Magic.IndexedDb/Extensions/MagicJsInvoke.cs @@ -122,7 +122,7 @@ internal async Task CallInvokeVoidDefaultJsAsync(string modulePath, string funct stream.Position = 0; - var streamRef = new DotNetStreamReference(stream); + using var streamRef = new DotNetStreamReference(stream); // Send to JS var responseStreamRef = await _jsModule.InvokeAsync("streamedJsHandler", @@ -133,6 +133,7 @@ internal async Task CallInvokeVoidDefaultJsAsync(string modulePath, string funct using var reader = new StreamReader(responseStream); string jsonResponse = await reader.ReadToEndAsync(); + await responseStreamRef.DisposeAsync(); return MagicSerializationHelper.DeserializeObject(jsonResponse, settings); }