From c6a4147c91c2245b851133fcc0fea01ae87ce933 Mon Sep 17 00:00:00 2001 From: Hecate2 <2474101468@qq.com> Date: Wed, 9 Oct 2024 18:02:19 +0800 Subject: [PATCH 1/2] dumpnef performance --- src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs b/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs index 12243b703..b841c2433 100644 --- a/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs +++ b/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs @@ -256,6 +256,7 @@ public static List OpCodeAddressesInMethod(NefFile nef, JToken DebugInfo, s public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) { Script script = nef.Script; + string addressPadding = script.GetInstructionAddressPadding(); List<(int, Instruction)> addressAndInstructionsList = script.EnumerateInstructions().ToList(); Dictionary addressToInstruction = new(); foreach ((int a, Instruction i) in addressAndInstructionsList) @@ -292,13 +293,13 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) } Dictionary docPathToContent = new(); - string dumpnef = ""; + StringBuilder dumpnef = new(); foreach ((int a, Instruction i) in script.EnumerateInstructions(/*print: true*/).ToList()) { if (methodStartAddrToName.ContainsKey(a)) - dumpnef += $"# Method Start {methodStartAddrToName[a]}\n"; + dumpnef.Append($"# Method Start {methodStartAddrToName[a]}\n"); if (methodEndAddrToName.ContainsKey(a)) - dumpnef += $"# Method End {methodEndAddrToName[a]}\n"; + dumpnef.Append($"# Method End {methodEndAddrToName[a]}\n"); if (newAddrToSequencePoint.ContainsKey(a)) { foreach ((int docId, int startLine, int startCol, int endLine, int endCol) in newAddrToSequencePoint[a]) @@ -309,7 +310,7 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) if (!docPathToContent.ContainsKey(docPath)) docPathToContent.Add(docPath, File.ReadAllLines(docPath).ToArray()); if (startLine == endLine) - dumpnef += $"# Code {Path.GetFileName(docPath)} line {startLine}: \"{docPathToContent[docPath][startLine - 1][(startCol - 1)..(endCol - 1)]}\"\n"; + dumpnef.Append($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{docPathToContent[docPath][startLine - 1][(startCol - 1)..(endCol - 1)]}\"\n"); else for (int lineIndex = startLine; lineIndex <= endLine; lineIndex++) { @@ -320,14 +321,14 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) src = docPathToContent[docPath][lineIndex - 1][..(endCol - 1)].Trim(); else src = docPathToContent[docPath][lineIndex - 1].Trim(); - dumpnef += $"# Code {Path.GetFileName(docPath)} line {startLine}: \"{src}\"\n"; + dumpnef.Append($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{src}\"\n"); } } } if (a < script.Length) - dumpnef += $"{WriteInstruction(a, script.GetInstruction(a), script.GetInstructionAddressPadding(), nef.Tokens)}\n"; + dumpnef.Append($"{WriteInstruction(a, script.GetInstruction(a), addressPadding, nef.Tokens)}\n"); } - return dumpnef; + return dumpnef.ToString(); } } } From c899354bed694c172823742291167593f854d3bf Mon Sep 17 00:00:00 2001 From: Hecate2 <2474101468@qq.com> Date: Thu, 10 Oct 2024 09:50:22 +0800 Subject: [PATCH 2/2] use AppendLine --- src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs b/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs index b841c2433..f85109322 100644 --- a/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs +++ b/src/Neo.Compiler.CSharp/Optimizer/DumpNef.cs @@ -297,9 +297,9 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) foreach ((int a, Instruction i) in script.EnumerateInstructions(/*print: true*/).ToList()) { if (methodStartAddrToName.ContainsKey(a)) - dumpnef.Append($"# Method Start {methodStartAddrToName[a]}\n"); + dumpnef.AppendLine($"# Method Start {methodStartAddrToName[a]}"); if (methodEndAddrToName.ContainsKey(a)) - dumpnef.Append($"# Method End {methodEndAddrToName[a]}\n"); + dumpnef.AppendLine($"# Method End {methodEndAddrToName[a]}"); if (newAddrToSequencePoint.ContainsKey(a)) { foreach ((int docId, int startLine, int startCol, int endLine, int endCol) in newAddrToSequencePoint[a]) @@ -310,7 +310,7 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) if (!docPathToContent.ContainsKey(docPath)) docPathToContent.Add(docPath, File.ReadAllLines(docPath).ToArray()); if (startLine == endLine) - dumpnef.Append($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{docPathToContent[docPath][startLine - 1][(startCol - 1)..(endCol - 1)]}\"\n"); + dumpnef.AppendLine($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{docPathToContent[docPath][startLine - 1][(startCol - 1)..(endCol - 1)]}\""); else for (int lineIndex = startLine; lineIndex <= endLine; lineIndex++) { @@ -321,12 +321,12 @@ public static string GenerateDumpNef(NefFile nef, JToken? debugInfo) src = docPathToContent[docPath][lineIndex - 1][..(endCol - 1)].Trim(); else src = docPathToContent[docPath][lineIndex - 1].Trim(); - dumpnef.Append($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{src}\"\n"); + dumpnef.AppendLine($"# Code {Path.GetFileName(docPath)} line {startLine}: \"{src}\""); } } } if (a < script.Length) - dumpnef.Append($"{WriteInstruction(a, script.GetInstruction(a), addressPadding, nef.Tokens)}\n"); + dumpnef.AppendLine($"{WriteInstruction(a, script.GetInstruction(a), addressPadding, nef.Tokens)}"); } return dumpnef.ToString(); }