StringBuilderPool reduced memory allocation in 3000 times

This commit is contained in:
2025-04-05 08:27:58 +05:00
parent b0fefbf667
commit f3106769d9
4 changed files with 111 additions and 31 deletions
+22 -3
View File
@@ -1,6 +1,25 @@
namespace ParadoxSaveParser.Lib;
public record SearchArgs(string key, int localIndex);
public record SearchArgs
{
public readonly string KeyStr;
public readonly StringBuilder? KeySB;
public readonly int LocalIndex;
public SearchArgs(int localIndex, string keyStr)
{
KeyStr = keyStr;
KeySB = null;
LocalIndex = localIndex;
}
public SearchArgs(int localIndex, StringBuilder keySb)
{
KeyStr = string.Empty;
KeySB = keySb;
LocalIndex = localIndex;
}
}
public interface ISearchExpression
{
@@ -109,7 +128,7 @@ public static class SearchExpressionCompiler
{
public bool DoesMatch(SearchArgs args, out ISearchExpression? nextSearchExpression)
{
if (args.localIndex == index)
if (args.LocalIndex == index)
{
nextSearchExpression = next;
return true;
@@ -124,7 +143,7 @@ public static class SearchExpressionCompiler
{
public bool DoesMatch(SearchArgs args, out ISearchExpression? nextSearchExpression)
{
if (args.key == key)
if ((args.KeySB != null && args.KeySB.Equals(key)) || args.KeyStr == key)
{
nextSearchExpression = next;
return true;