From adc72f6d3be5aefe22897fcf1c855fd6025c1793 Mon Sep 17 00:00:00 2001 From: molsonkiko <46202915+molsonkiko@users.noreply.github.com> Date: Thu, 28 Dec 2023 08:23:22 -0800 Subject: [PATCH] editor.GetText optimizations use C-style pattern of calling Scintilla method with NULL buffer initially to find length, then getting a buffer of the length found in the first step also eliminate wasteful call to TrimEnd('\x00') to reduce pressure on the garbage collector --- .../PluginInfrastructure/ScintillaGateway.cs | 39 +++++---- JsonToolsNppPlugin/Properties/AssemblyInfo.cs | 4 +- most recent errors.txt | 82 +++++++++---------- 3 files changed, 68 insertions(+), 57 deletions(-) diff --git a/JsonToolsNppPlugin/PluginInfrastructure/ScintillaGateway.cs b/JsonToolsNppPlugin/PluginInfrastructure/ScintillaGateway.cs index b9b7d24..a72c9d9 100644 --- a/JsonToolsNppPlugin/PluginInfrastructure/ScintillaGateway.cs +++ b/JsonToolsNppPlugin/PluginInfrastructure/ScintillaGateway.cs @@ -20,6 +20,29 @@ public class ScintillaGateway : IScintillaGateway public static readonly int LengthZeroTerminator = "\0".Length; + /// + /// many scintilla methods have a length parameter and a buffer pointer and are bimodal:

+ /// * if length is 0, return the length and have no side effects

+ /// * if length is greater than 0, return the length and fill the buffer with length characters

+ /// This method gets the length if the length is 0, uses the second mode to fill a buffer,

+ /// and returns a string of the UTF8-decoded buffer with all trailing '\x00' chars stripped off. + ///
+ /// message to send + /// number of characters to retrieve (if 0, find out by sending message) + /// + private unsafe string GetNullStrippedStringFromMessageThatReturnsLength(SciMsg msg, int length = 0) + { + if (length < 1) + length = Win32.SendMessage(scintilla, msg, (IntPtr)Unused, (IntPtr)Unused).ToInt32(); + byte[] textBuffer = new byte[length]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, msg, (IntPtr)length, (IntPtr)textPtr); + int lastNullCharPos = length - 1; + for (; lastNullCharPos >= 0 && textBuffer[lastNullCharPos] == '\x00'; lastNullCharPos--) { } + return Encoding.UTF8.GetString(textBuffer, 0, lastNullCharPos + 1); + } + } public ScintillaGateway(IntPtr scintilla) { @@ -1609,12 +1632,7 @@ public void SetSel(int anchor, int caret) /// public unsafe string GetSelText() { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, (IntPtr) Unused, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } + return GetNullStrippedStringFromMessageThatReturnsLength(SciMsg.SCI_GETSELTEXT); } /// @@ -1766,14 +1784,7 @@ public unsafe void SetText(string text) /// public unsafe string GetText(int length = -1) { - if (length == -1) - length = GetLength() + 1; - byte[] textBuffer = new byte[length]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXT, (IntPtr) length, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } + return GetNullStrippedStringFromMessageThatReturnsLength(SciMsg.SCI_GETTEXT); } /// Retrieve the number of characters in the document. (Scintilla feature 2183) diff --git a/JsonToolsNppPlugin/Properties/AssemblyInfo.cs b/JsonToolsNppPlugin/Properties/AssemblyInfo.cs index a6f4079..d72cf29 100644 --- a/JsonToolsNppPlugin/Properties/AssemblyInfo.cs +++ b/JsonToolsNppPlugin/Properties/AssemblyInfo.cs @@ -28,5 +28,5 @@ // Build Number // Revision // -[assembly: AssemblyVersion("6.0.0.10")] -[assembly: AssemblyFileVersion("6.0.0.10")] +[assembly: AssemblyVersion("6.0.0.11")] +[assembly: AssemblyFileVersion("6.0.0.11")] diff --git a/most recent errors.txt b/most recent errors.txt index 2c56726..4440964 100644 --- a/most recent errors.txt +++ b/most recent errors.txt @@ -1,4 +1,4 @@ -Test results for JsonTools v6.0.0.10 on Notepad++ 8.5.8 64bit +Test results for JsonTools v6.0.0.11 on Notepad++ 8.5.8 64bit NOTE: Ctrl-F (regular expressions *on*) for "Failed [1-9]\d*" to find all failed tests Tests failed: YAML dumper ========================= @@ -195,33 +195,33 @@ Testing JsonParser performance Preview of json: [{"A": "Ky'c^g#~)0", "a": 1850111954, "b": 9318359041, "B": "Oyi:/ xxe2", "C": "sKCSa_^7Gg", "c": 7974777124, "d": 2670309238, "D": "0d_K)HmX!.", "E": ".uM*Z{0EJ_", "e": 6958410336, "f": 8050244728, "F": "1%SG_A!xB\t", "g": 3799657125, "G": "il1^k\\\nat*", "H": {"a": 6079042826, "b": 7292804611, "c" ... -To convert JSON string of size 89556 into JNode took 3.255 +/- 2.247 ms over 32 trials -Load times (ms): 5, 11, 2, 6, 2, 2, 2, 3, 2, 1, 8, 2, 2, 2, 3, 2, 2, 1, 3, 1, 1, 5, 1, 1, 2, 3, 1, 2, 6, 2, 1, 2 +To convert JSON string of size 89556 into JNode took 2.623 +/- 1.66 ms over 32 trials +Load times (ms): 4, 9, 1, 4, 1, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 4, 1, 1, 1, 2, 1, 1, 4, 2, 1, 2, 4, 1, 1, 1 ========================= Performance tests for RemesPath (float arithmetic) ========================= -Compiling query "@[@[:].a * @[:].t < @[:].e]" took 0.161 ms the first time, including approximately 0.092 ms to tokenize the query. Subsequent executions are effectively free due to caching. -To run pre-compiled query "@[@[:].a * @[:].t < @[:].e]" on JNode from JSON of size 89556 into took 0.035 +/- 0.016 ms over 40 trials -Query times (ms): 0.114, 0.062, 0.043, 0.043, 0.042, 0.044, 0.044, 0.051, 0.044, 0.046, 0.049, 0.024, 0.024, 0.031, 0.025, 0.024, 0.024, 0.024, 0.024, 0.047, 0.04, 0.039, 0.037, 0.04, 0.042, 0.028, 0.023, 0.035, 0.03, 0.027, 0.024, 0.025, 0.023, 0.023, 0.023, 0.022, 0.022, 0.025, 0.023, 0.023 +Compiling query "@[@[:].a * @[:].t < @[:].e]" took 0.055 ms the first time, including approximately 0.067 ms to tokenize the query. Subsequent executions are effectively free due to caching. +To run pre-compiled query "@[@[:].a * @[:].t < @[:].e]" on JNode from JSON of size 89556 into took 0.029 +/- 0.012 ms over 40 trials +Query times (ms): 0.082, 0.03, 0.022, 0.033, 0.022, 0.023, 0.023, 0.025, 0.022, 0.029, 0.022, 0.022, 0.022, 0.063, 0.047, 0.034, 0.023, 0.022, 0.023, 0.042, 0.025, 0.036, 0.04, 0.024, 0.024, 0.028, 0.023, 0.023, 0.024, 0.023, 0.022, 0.03, 0.022, 0.023, 0.023, 0.024, 0.022, 0.028, 0.023, 0.023 Preview of result: [{"A": "Ky'c^g#~)0", "a": 1850111954, "b": 9318359041, "B": "Oyi:/ xxe2", "C": "sKCSa_^7Gg", "c": 7974777124, "d": 2670309238, "D": "0d_K)HmX!.", "E": ".uM*Z{0EJ_", "e": 6958410336, "f": 8050244728, "F": "1%SG_A!xB\t", "g": 3799657125, "G": "il1^k\\\nat*", "H": {"a": 6079042826, "b": 7292804611, "c" ... ========================= Performance tests for RemesPath (string operations) ========================= -Compiling query "@[@[:].z =~ `(?i)[a-z]{5}`]" took 0.048 ms the first time, including approximately 0.048 ms to tokenize the query. Subsequent executions are effectively free due to caching. -To run pre-compiled query "@[@[:].z =~ `(?i)[a-z]{5}`]" on JNode from JSON of size 89556 into took 0.062 +/- 0.016 ms over 40 trials -Query times (ms): 0.128, 0.07, 0.078, 0.097, 0.059, 0.061, 0.058, 0.059, 0.059, 0.058, 0.081, 0.056, 0.054, 0.056, 0.055, 0.056, 0.056, 0.055, 0.057, 0.056, 0.056, 0.055, 0.056, 0.055, 0.056, 0.058, 0.057, 0.057, 0.077, 0.053, 0.055, 0.058, 0.054, 0.054, 0.053, 0.053, 0.054, 0.053, 0.06, 0.105 +Compiling query "@[@[:].z =~ `(?i)[a-z]{5}`]" took 0.052 ms the first time, including approximately 0.08 ms to tokenize the query. Subsequent executions are effectively free due to caching. +To run pre-compiled query "@[@[:].z =~ `(?i)[a-z]{5}`]" on JNode from JSON of size 89556 into took 0.088 +/- 0.023 ms over 40 trials +Query times (ms): 0.172, 0.11, 0.102, 0.108, 0.093, 0.094, 0.095, 0.097, 0.094, 0.093, 0.108, 0.09, 0.097, 0.105, 0.081, 0.092, 0.1, 0.111, 0.096, 0.076, 0.097, 0.057, 0.057, 0.06, 0.085, 0.071, 0.09, 0.089, 0.094, 0.074, 0.116, 0.115, 0.098, 0.056, 0.056, 0.056, 0.059, 0.059, 0.062, 0.056 Preview of result: [{"A": "\n]o1VQ5t6g", "a": 4710024278, "b": 3268860721, "B": "g4Y7+ew^.v", "C": "NK nmax_notq, `when q=true, nmax = ` + str(nmax_q), `when q=false, nmax= ` + str(nmax_notq))" took 0.202 ms the first time, including approximately 0.169 ms to tokenize the query. Subsequent executions are effectively free due to caching. +ifelse(nmax_q > nmax_notq, `when q=true, nmax = ` + str(nmax_q), `when q=false, nmax= ` + str(nmax_notq))" took 0.259 ms the first time, including approximately 0.232 ms to tokenize the query. Subsequent executions are effectively free due to caching. To run pre-compiled query "var qmask = @[:].q; var nmax_q = max(@[qmask].n); var nmax_notq = max(@[not qmask].n); -ifelse(nmax_q > nmax_notq, `when q=true, nmax = ` + str(nmax_q), `when q=false, nmax= ` + str(nmax_notq))" on JNode from JSON of size 89556 into took 0.036 +/- 0.018 ms over 40 trials -Query times (ms): 0.117, 0.035, 0.033, 0.039, 0.044, 0.04, 0.04, 0.051, 0.036, 0.033, 0.035, 0.036, 0.034, 0.065, 0.036, 0.038, 0.039, 0.039, 0.047, 0.025, 0.069, 0.026, 0.024, 0.023, 0.024, 0.023, 0.042, 0.05, 0.025, 0.061, 0.021, 0.021, 0.023, 0.02, 0.02, 0.019, 0.02, 0.019, 0.02, 0.019 +ifelse(nmax_q > nmax_notq, `when q=true, nmax = ` + str(nmax_q), `when q=false, nmax= ` + str(nmax_notq))" on JNode from JSON of size 89556 into took 0.047 +/- 0.071 ms over 40 trials +Query times (ms): 0.148, 0.039, 0.03, 0.044, 0.033, 0.057, 0.041, 0.033, 0.032, 0.03, 0.028, 0.03, 0.031, 0.03, 0.026, 0.027, 0.027, 0.027, 0.039, 0.029, 0.028, 0.028, 0.027, 0.027, 0.028, 0.028, 0.027, 0.028, 0.027, 0.028, 0.029, 0.048, 0.031, 0.474, 0.07, 0.028, 0.028, 0.031, 0.031, 0.053 Preview of result: "when q=false, nmax= 9830935647.0" ... ========================= @@ -260,11 +260,11 @@ Performance tests for RemesPath (references to compile-time constant variables) Compiling query "var X = X; var onetwo = j`[1, 2]`; -@[:]->at(@, X)->at(@, onetwo)" took 0.131 ms the first time, including approximately 0.484 ms to tokenize the query. Subsequent executions are effectively free due to caching. +@[:]->at(@, X)->at(@, onetwo)" took 0.144 ms the first time, including approximately 0.12 ms to tokenize the query. Subsequent executions are effectively free due to caching. To run pre-compiled query "var X = X; var onetwo = j`[1, 2]`; -@[:]->at(@, X)->at(@, onetwo)" on JNode from JSON of size 89556 into took 0.029 +/- 0.024 ms over 40 trials -Query times (ms): 0.106, 0.028, 0.028, 0.023, 0.088, 0.017, 0.058, 0.028, 0.055, 0.04, 0.015, 0.014, 0.015, 0.014, 0.015, 0.014, 0.014, 0.014, 0.015, 0.015, 0.04, 0.03, 0.025, 0.028, 0.027, 0.027, 0.026, 0.026, 0.026, 0.026, 0.026, 0.114, 0.022, 0.013, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014 +@[:]->at(@, X)->at(@, onetwo)" on JNode from JSON of size 89556 into took 0.022 +/- 0.014 ms over 40 trials +Query times (ms): 0.071, 0.014, 0.015, 0.013, 0.015, 0.077, 0.039, 0.014, 0.041, 0.013, 0.025, 0.017, 0.014, 0.026, 0.014, 0.014, 0.014, 0.013, 0.013, 0.013, 0.02, 0.026, 0.024, 0.029, 0.027, 0.015, 0.014, 0.013, 0.015, 0.016, 0.014, 0.025, 0.037, 0.027, 0.026, 0.021, 0.013, 0.014, 0.013, 0.014 Preview of result: [[1695727848, 0.287562638736685], [2126430375, 0.00767794129708177], [5310550656, 0.380769772645687], [2519183283, 0.153176220930558], [6610062385, 0.662996225870666], [987168256, 0.924410189999928], [6615003609, 0.917112691225947], [4465232046, 0.684311931851536], [8654414565, 0.631485392105992], [ ... ========================= @@ -273,29 +273,29 @@ Performance tests for RemesPath (references to variables that are not compile-ti Compiling query "var X = @->`X`; var onetwo = @{1, 2}; -@[:]->at(@, X)->at(@, onetwo)" took 0.1 ms the first time, including approximately 0.095 ms to tokenize the query. Subsequent executions are effectively free due to caching. +@[:]->at(@, X)->at(@, onetwo)" took 0.242 ms the first time, including approximately 0.138 ms to tokenize the query. Subsequent executions are effectively free due to caching. To run pre-compiled query "var X = @->`X`; var onetwo = @{1, 2}; -@[:]->at(@, X)->at(@, onetwo)" on JNode from JSON of size 89556 into took 0.031 +/- 0.014 ms over 40 trials -Query times (ms): 0.071, 0.02, 0.045, 0.035, 0.036, 0.044, 0.031, 0.054, 0.037, 0.065, 0.034, 0.058, 0.037, 0.039, 0.04, 0.021, 0.019, 0.019, 0.019, 0.019, 0.018, 0.02, 0.02, 0.018, 0.019, 0.019, 0.019, 0.019, 0.018, 0.018, 0.018, 0.047, 0.034, 0.026, 0.02, 0.032, 0.038, 0.035, 0.033, 0.02 +@[:]->at(@, X)->at(@, onetwo)" on JNode from JSON of size 89556 into took 0.032 +/- 0.018 ms over 40 trials +Query times (ms): 0.11, 0.019, 0.024, 0.031, 0.081, 0.05, 0.059, 0.032, 0.041, 0.034, 0.032, 0.03, 0.034, 0.035, 0.035, 0.032, 0.031, 0.03, 0.04, 0.032, 0.017, 0.017, 0.016, 0.026, 0.032, 0.032, 0.032, 0.029, 0.019, 0.017, 0.018, 0.018, 0.016, 0.026, 0.02, 0.017, 0.019, 0.018, 0.031, 0.033 Preview of result: [[1695727848, 0.287562638736685], [2126430375, 0.00767794129708177], [5310550656, 0.380769772645687], [2519183283, 0.153176220930558], [6610062385, 0.662996225870666], [987168256, 0.924410189999928], [6615003609, 0.917112691225947], [4465232046, 0.684311931851536], [8654414565, 0.631485392105992], [ ... ========================= Performance tests for RemesPath (simple string mutations) ========================= -Compiling query "@[:].z = s_sub(@, g, B)" took 0.076 ms the first time, including approximately 0.086 ms to tokenize the query. Subsequent executions are effectively free due to caching. -To run pre-compiled query "@[:].z = s_sub(@, g, B)" on JNode from JSON of size 89556 into took 0.038 +/- 0.04 ms over 40 trials -Query times (ms): 0.062, 0.03, 0.044, 0.014, 0.018, 0.029, 0.029, 0.042, 0.038, 0.043, 0.025, 0.018, 0.015, 0.014, 0.016, 0.037, 0.023, 0.02, 0.026, 0.026, 0.021, 0.026, 0.021, 0.102, 0.025, 0.267, 0.033, 0.03, 0.047, 0.035, 0.026, 0.035, 0.033, 0.034, 0.033, 0.029, 0.054, 0.031, 0.025, 0.029 +Compiling query "@[:].z = s_sub(@, g, B)" took 0.076 ms the first time, including approximately 0.106 ms to tokenize the query. Subsequent executions are effectively free due to caching. +To run pre-compiled query "@[:].z = s_sub(@, g, B)" on JNode from JSON of size 89556 into took 0.031 +/- 0.009 ms over 40 trials +Query times (ms): 0.045, 0.031, 0.018, 0.028, 0.043, 0.028, 0.037, 0.037, 0.023, 0.036, 0.019, 0.025, 0.019, 0.028, 0.039, 0.018, 0.016, 0.015, 0.053, 0.038, 0.026, 0.024, 0.023, 0.025, 0.024, 0.033, 0.034, 0.031, 0.041, 0.03, 0.027, 0.034, 0.028, 0.03, 0.029, 0.039, 0.039, 0.042, 0.041, 0.037 Preview of result: [{"A": "Ky'c^g#~)0", "a": 1850111954, "b": 9318359041, "B": "Oyi:/ xxe2", "C": "sKCSa_^7Gg", "c": 7974777124, "d": 2670309238, "D": "0d_K)HmX!.", "E": ".uM*Z{0EJ_", "e": 6958410336, "f": 8050244728, "F": "1%SG_A!xB\t", "g": 3799657125, "G": "il1^k\\\nat*", "H": {"a": 6079042826, "b": 7292804611, "c" ... ========================= Performance tests for RemesPath (simple number mutations) ========================= -Compiling query "@[:].x = ifelse(@ < 0.5, @ + 3, @ - 3)" took 0.148 ms the first time, including approximately 0.131 ms to tokenize the query. Subsequent executions are effectively free due to caching. -To run pre-compiled query "@[:].x = ifelse(@ < 0.5, @ + 3, @ - 3)" on JNode from JSON of size 89556 into took 0.105 +/- 0.378 ms over 40 trials -Query times (ms): 0.088, 0.042, 0.036, 0.04, 0.04, 0.042, 0.047, 0.051, 0.045, 0.04, 0.038, 0.038, 0.069, 2.464, 0.031, 0.043, 0.024, 0.032, 0.037, 0.032, 0.04, 0.031, 0.023, 0.024, 0.023, 0.063, 0.093, 0.058, 0.042, 0.046, 0.049, 0.048, 0.049, 0.047, 0.05, 0.047, 0.042, 0.045, 0.038, 0.05 +Compiling query "@[:].x = ifelse(@ < 0.5, @ + 3, @ - 3)" took 0.244 ms the first time, including approximately 0.121 ms to tokenize the query. Subsequent executions are effectively free due to caching. +To run pre-compiled query "@[:].x = ifelse(@ < 0.5, @ + 3, @ - 3)" on JNode from JSON of size 89556 into took 0.055 +/- 0.025 ms over 40 trials +Query times (ms): 0.061, 0.06, 0.057, 0.054, 0.047, 0.037, 0.04, 0.046, 0.043, 0.039, 0.038, 0.038, 0.063, 0.06, 0.058, 0.052, 0.044, 0.04, 0.051, 0.049, 0.05, 0.051, 0.05, 0.049, 0.057, 0.089, 0.056, 0.041, 0.042, 0.04, 0.04, 0.043, 0.047, 0.051, 0.041, 0.044, 0.056, 0.154, 0.157, 0.067 Preview of result: [{"A": "Ky'c^g#~)0", "a": 1850111954, "b": 9318359041, "B": "Oyi:/ xxe2", "C": "sKCSa_^7Gg", "c": 7974777124, "d": 2670309238, "D": "0d_K)HmX!.", "E": ".uM*Z{0EJ_", "e": 6958410336, "f": 8050244728, "F": "1%SG_A!xB\t", "g": 3799657125, "G": "il1^k\\\nat*", "H": {"a": 6079042826, "b": 7292804611, "c" ... ========================= @@ -305,12 +305,12 @@ Performance tests for RemesPath (mutations with a for loop) Compiling query "var xhalf = @[:].x < 0.5; for lx = zip(@[:].l, xhalf); lx[0] = ifelse(lx[1], foo, bar); -end for;" took 0.179 ms the first time, including approximately 0.137 ms to tokenize the query. Subsequent executions are effectively free due to caching. +end for;" took 0.31 ms the first time, including approximately 0.208 ms to tokenize the query. Subsequent executions are effectively free due to caching. To run pre-compiled query "var xhalf = @[:].x < 0.5; for lx = zip(@[:].l, xhalf); lx[0] = ifelse(lx[1], foo, bar); -end for;" on JNode from JSON of size 89556 into took 0.05 +/- 0.015 ms over 40 trials -Query times (ms): 0.074, 0.049, 0.042, 0.042, 0.041, 0.076, 0.04, 0.037, 0.04, 0.058, 0.099, 0.089, 0.042, 0.051, 0.047, 0.039, 0.038, 0.042, 0.062, 0.039, 0.038, 0.04, 0.044, 0.063, 0.054, 0.04, 0.038, 0.039, 0.063, 0.042, 0.074, 0.052, 0.041, 0.041, 0.038, 0.072, 0.047, 0.042, 0.04, 0.054 +end for;" on JNode from JSON of size 89556 into took 0.095 +/- 0.023 ms over 40 trials +Query times (ms): 0.108, 0.082, 0.075, 0.136, 0.131, 0.103, 0.089, 0.087, 0.078, 0.074, 0.099, 0.078, 0.099, 0.087, 0.052, 0.104, 0.058, 0.047, 0.078, 0.126, 0.109, 0.119, 0.127, 0.117, 0.082, 0.083, 0.085, 0.095, 0.076, 0.08, 0.11, 0.124, 0.128, 0.133, 0.116, 0.076, 0.109, 0.098, 0.07, 0.067 Preview of result: [["bar", false], ["bar", false], ["foo", true], ["foo", true], ["foo", true], ["foo", true], ["foo", true], ["bar", false], ["bar", false], ["bar", false], ["foo", true], ["foo", true], ["bar", false], ["bar", false], ["foo", true], ["bar", false], ["bar", false], ["bar", false], ["foo", true], ["ba ... ========================= @@ -319,18 +319,18 @@ Testing performance of JSON compression and pretty-printing Preview of json: [{"A": "Ky'c^g#~)0", "a": 1850111954, "b": 9318359041, "B": "Oyi:/ xxe2", "C": "sKCSa_^7Gg", "c": 7974777124, "d": 2670309238, "D": "0d_K)HmX!.", "E": ".uM*Z{0EJ_", "e": 6958410336, "f": 8050244728, "F": "1%SG_A!xB\t", "g": 3799657125, "G": "il1^k\\\nat*", "H": {"a": 6079042826, "b": 7292804611, "c" ... -To compress JNode from JSON string of 89556 took 6.481 +/- 2.535 ms over 64 trials (minimal whitespace, sort_keys=TRUE) -To compress JNode from JSON string of 89556 took 4.461 +/- 1.202 ms over 64 trials (minimal whitespace, sort_keys=FALSE) -To Google-style pretty-print JNode from JSON string of 89556 took 6.406 +/- 2.348 ms over 64 trials (sort_keys=true, indent=4) -To Whitesmith-style pretty-print JNode from JSON string of 89556 took 5.361 +/- 1.132 ms over 64 trials (sort_keys=true, indent=4) -To PPrint-style pretty-print JNode from JSON string of 89556 took 6.306 +/- 0.703 ms over 64 trials (sort_keys=true, indent=4) +To compress JNode from JSON string of 89556 took 5.053 +/- 1.154 ms over 64 trials (minimal whitespace, sort_keys=TRUE) +To compress JNode from JSON string of 89556 took 2.442 +/- 0.368 ms over 64 trials (minimal whitespace, sort_keys=FALSE) +To Google-style pretty-print JNode from JSON string of 89556 took 4.202 +/- 0.333 ms over 64 trials (sort_keys=true, indent=4) +To Whitesmith-style pretty-print JNode from JSON string of 89556 took 4.483 +/- 0.641 ms over 64 trials (sort_keys=true, indent=4) +To PPrint-style pretty-print JNode from JSON string of 89556 took 6.142 +/- 0.954 ms over 64 trials (sort_keys=true, indent=4) ========================= Testing performance of JsonSchemaValidator and random JSON creation ========================= -To create a random set of tweet JSON of size 187795 (15 tweets) based on the matching schema took 6.669 +/- 3.603 ms over 64 trials -To compile the tweet schema to a validation function took 0.412 +/- 0.966 ms over 64 trials -To validate tweet JSON of size 187795 (15 tweets) based on the compiled schema took 1.073 +/- 0.204 ms over 64 trials +To create a random set of tweet JSON of size 191443 (15 tweets) based on the matching schema took 5.942 +/- 2.898 ms over 64 trials +To compile the tweet schema to a validation function took 0.45 +/- 0.97 ms over 64 trials +To validate tweet JSON of size 191443 (15 tweets) based on the compiled schema took 1.047 +/- 0.178 ms over 64 trials ========================= Testing JSON grepper's API request tool =========================