Advertisement
TimRiker

stringtest.ps1

Mar 27th, 2018
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #! /usr/bin/pwsh
  2.  
  3. # Consider these variations on coding this series of
  4. # string concatenations
  5.  
  6. $count=10000
  7.  
  8. # get our 'native' end of line
  9. $eol=@'
  10.  
  11.  
  12. '@
  13.  
  14. "eol is `"$eol`""
  15.  
  16. '$s = $s + "xyzzy" + "`n"'
  17. $s = ""
  18. "$(Measure-Command {1..$count | ForEach-Object {$s = $s + "xyzzy" + "`n"} } | Select-Object -exp ticks)`t$($s.length)"
  19.  
  20. '$s = $s + ("xyzzy" + "`n")'
  21. $s = ""
  22. "$(Measure-Command {1..$count | ForEach-Object {$s = $s + ("xyzzy" + "`n")} } | Select-Object -exp ticks)`t$($s.length)"
  23.  
  24. '$s = $s + "xyzzy`n"'
  25. $s = ""
  26. "$(Measure-Command {1..$count | ForEach-Object {$s = $s + "xyzzy`n"} } | Select-Object -exp ticks)`t$($s.length)"
  27.  
  28. '$s = $s + "xyzzy`n"'
  29. $s = ""
  30. "$(Measure-Command {1..$count | ForEach-Object {$s = $s + "xyzzy`n"} } | Select-Object -exp ticks)`t$($s.length)"
  31.  
  32. '$s += "xyzzy" + "`n"'
  33. $s = ""
  34. "$(Measure-Command {1..$count | ForEach-Object {$s += "xyzzy" + "`n"} } | Select-Object -exp ticks)`t$($s.length)"
  35.  
  36. # String formatting is faster than doing multiple concatenations if you can do multiple at once:
  37. '$s += "{0}{1}" -f "xyzzy", "`n"'
  38. $s = ""
  39. "$(Measure-Command {1..$count | ForEach-Object {$s += "{0}{1}" -f "xyzzy", "`n"} } | Select-Object -exp ticks)`t$($s.length)"
  40.  
  41. # arrays are even worse
  42. '$sarray += "xyzzy`n"'
  43. $s = ""
  44. $sarray = @("")
  45. Measure-Command {
  46.     1..$count | ForEach-Object {$sarray += "xyzzy`n"}
  47.     $s=$sarray -Join ""
  48. } | Select-Object -exp ticks
  49. $s.length
  50.  
  51. #use StringBuilder.
  52. '$s.Append("xyzzy"); $s.Append("`n")'
  53. $s = New-Object Text.StringBuilder
  54. Measure-Command {1..$count | ForEach-Object {$s.Append("xyzzy"); $s.Append("`n")} } |
  55. Select-Object -exp ticks
  56. $s.length
  57.  
  58. '$s.Append("xyzzy" + "`n")'
  59. $s = New-Object Text.StringBuilder
  60. Measure-Command {1..$count | ForEach-Object {$s.Append("xyzzy" + "`n")} } |
  61. Select-Object -exp ticks
  62. $s.length
  63.  
  64. '$s.Append("xyzzy`n")'
  65. $s = New-Object Text.StringBuilder
  66. Measure-Command {1..$count | ForEach-Object {$s.Append("xyzzy`n")} } |
  67. Select-Object -exp ticks
  68. $s.length
  69.  
  70. # @''@ used to include native newline.
  71. '$s.Append(@)'
  72. $s = New-Object Text.StringBuilder
  73. Measure-Command {1..$count | ForEach-Object {$s.Append(@'
  74. xyzzy
  75.  
  76. '@
  77. )} } |
  78. Select-Object -exp ticks
  79. $s.length
  80.  
  81. '$list.Add("xyzzy`n")'
  82. Measure-Command {
  83.     $list = New-Object System.Collections.Generic.List[System.String]
  84.     for ($i = 0; $i -lt $count; $i++)
  85.     {
  86.         $list.Add("xyzzy`n")
  87.     }
  88.     $s = $list.ToArray() -Join ""
  89. } |
  90. Select-Object -exp ticks
  91. $s.length
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement