回答編集履歴

1

処理速度を計ってみた。

2019/01/14 03:28

投稿

pepperleaf
pepperleaf

スコア6383

test CHANGED
@@ -14,8 +14,76 @@
14
14
 
15
15
  string.Join() を使ったら、StringBuilder を使う価値が半減。
16
16
 
17
- ```StringBuilder.Append()``` を使うようにした方が良いのでは?
17
+ StringBuilder.Append() を使うようにした方が良いのでは?
18
18
 
19
19
  等々、ありそうです。
20
20
 
21
21
  ただ、まずは、どの部分が遅いのかの確認が先かと考えます。
22
+
23
+
24
+
25
+ [追記]
26
+
27
+ string.Join()は、遅くないとの指摘があったので、確認してみました。
28
+
29
+
30
+
31
+ ```C#
32
+
33
+ const int LoopCount = 100000000;
34
+
35
+ Stopwatch sw = new Stopwatch();
36
+
37
+ StringBuilder sb = new StringBuilder();
38
+
39
+ string str1 = "abc";
40
+
41
+ sw.Reset();
42
+
43
+ sw.Start();
44
+
45
+ for (int i = 0; i < LoopCount; i++) {
46
+
47
+ sb.Clear();
48
+
49
+ sb.AppendLine(string.Join(",", str1));
50
+
51
+ }
52
+
53
+ sw.Stop();
54
+
55
+ Console.WriteLine("string.Join: " + sw.Elapsed);
56
+
57
+
58
+
59
+ sw.Reset();
60
+
61
+ sw.Start();
62
+
63
+ for (int i = 0; i < LoopCount; i++) {
64
+
65
+ sb.Clear();
66
+
67
+ sb.Append(",");
68
+
69
+ sb.AppendLine(str1);
70
+
71
+ }
72
+
73
+ sw.Stop();
74
+
75
+ Console.WriteLine("StringBuilder.Append: " + sw.Elapsed);
76
+
77
+ ```
78
+
79
+ この結果、手元の環境 (Win10)で、
80
+
81
+ string.Join(): 5.0 秒 (4.98 ~ 5.03)
82
+
83
+ StringBuilder.Append(): 1.9 秒 (1.91 ~ 1.92)
84
+
85
+ となりました。
86
+
87
+
88
+
89
+ 環境、書き方の問題等はあると思いますが、参考までに。