Prechádzať zdrojové kódy

Performance improvement for writing string literals

Brad Robinson 11 rokov pred
rodič
commit
43c8294b50
1 zmenil súbory, kde vykonal 34 pridanie a 0 odobranie
  1. 34 0
      PetaJson.cs

+ 34 - 0
PetaJson.cs

@@ -903,10 +903,44 @@ namespace PetaJson
                 _writer.Write(str);
             }
 
+            static char[] _charsToEscape = new char[] { '\"', '\r', '\n', '\t', '\0', '\\', '\'' };
+
             public void WriteStringLiteral(string str)
             {
                 _writer.Write("\"");
 
+                int pos = 0;
+                int escapePos;
+                while ((escapePos = str.IndexOfAny(_charsToEscape, pos)) >= 0)
+                {
+                    if (escapePos > pos)
+                        _writer.Write(str.Substring(pos, escapePos - pos));
+
+                    switch (str[escapePos])
+                    {
+                        case '\"': _writer.Write("\\\""); break;
+                        case '\r': _writer.Write("\\r"); break;
+                        case '\n': _writer.Write("\\n"); break;
+                        case '\t': _writer.Write("\\t"); break;
+                        case '\0': _writer.Write("\\0"); break;
+                        case '\\': _writer.Write("\\\\"); break;
+                        case '\'': _writer.Write("\\'"); break;
+                    }
+
+                    pos = escapePos + 1;
+                }
+
+
+                if (escapePos > pos)
+                    _writer.Write(str.Substring(pos, escapePos - pos));
+                _writer.Write("\"");
+            }
+
+
+            public void WriteStringLiteralX(string str)
+            {
+                _writer.Write("\"");
+
                 foreach (var ch in str)
                 {
                     switch (ch)