diff options
author | Zoltan Varga <vargaz@gmail.com> | 2017-08-03 03:36:57 +0300 |
---|---|---|
committer | Zoltan Varga <vargaz@gmail.com> | 2017-08-03 03:36:57 +0300 |
commit | 3aef9cdd6013fc0620a1817f0b11d8fb90ed2e0f (patch) | |
tree | ee0392dad811ae7678c394bcb7596dc61eb08730 | |
parent | 1d7d43603791e0236b56d076578657bee44fef6b (diff) |
Reduce allocations in LineWriter.cs.
-rw-r--r-- | LineWriter.cs | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/LineWriter.cs b/LineWriter.cs index 4acf925..198f985 100644 --- a/LineWriter.cs +++ b/LineWriter.cs @@ -34,10 +34,12 @@ namespace Ildasm readonly TextWriter writer; int column; bool wrapped; + StringBuilder sb; internal LineWriter(TextWriter writer) { this.writer = writer; + sb = new StringBuilder (256); } internal int Column @@ -55,41 +57,68 @@ namespace Ildasm wrapped = false; } + internal void Write(string str, object arg0) + { + int len = sb.Length; + sb.AppendFormat (str, arg0); + column += sb.Length - len; + } + internal void Write(string str, params object[] args) { - Write(String.Format(str, args)); + int len = sb.Length; + sb.AppendFormat (str, args); + column += sb.Length - len; } internal void Write(string str) { - writer.Write(str); + sb.Append (str); column += str.Length; } internal void WriteLine(string str) { - writer.WriteLine(str); + if (sb.Length > 0) { + sb.Append (str); + writer.WriteLine (sb.ToString ()); + sb.Clear (); + } else { + writer.WriteLine (str); + } column = 0; wrapped = true; } internal void WriteLine(string str, params object[] args) { - writer.WriteLine(str, args); + if (sb.Length > 0) { + sb.AppendFormat (str, args); + writer.WriteLine(sb.ToString ()); + sb.Clear (); + } else { + writer.WriteLine (String.Format (str, args)); + } column = 0; wrapped = true; } internal void WriteLine() { - writer.WriteLine(); + if (sb.Length > 0) { + writer.WriteLine (sb.ToString ()); + sb.Clear (); + } else { + writer.WriteLine (); + } column = 0; wrapped = true; } internal void GoToColumn(int column) { - Write(new String(' ', column - this.column)); + sb.Append (' ', column - this.column); + this.column = column; } internal void Flush() |