teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

処理速度を計ってみた。

2019/01/14 03:28

投稿

pepperleaf
pepperleaf

スコア6385

answer CHANGED
@@ -6,6 +6,40 @@
6
6
  > sb.AppendLine(string.Join(",", propertyList));
7
7
 
8
8
  string.Join() を使ったら、StringBuilder を使う価値が半減。
9
- ```StringBuilder.Append()``` を使うようにした方が良いのでは?
9
+ StringBuilder.Append() を使うようにした方が良いのでは?
10
10
  等々、ありそうです。
11
- ただ、まずは、どの部分が遅いのかの確認が先かと考えます。
11
+ ただ、まずは、どの部分が遅いのかの確認が先かと考えます。
12
+
13
+ [追記]
14
+ string.Join()は、遅くないとの指摘があったので、確認してみました。
15
+
16
+ ```C#
17
+ const int LoopCount = 100000000;
18
+ Stopwatch sw = new Stopwatch();
19
+ StringBuilder sb = new StringBuilder();
20
+ string str1 = "abc";
21
+ sw.Reset();
22
+ sw.Start();
23
+ for (int i = 0; i < LoopCount; i++) {
24
+ sb.Clear();
25
+ sb.AppendLine(string.Join(",", str1));
26
+ }
27
+ sw.Stop();
28
+ Console.WriteLine("string.Join: " + sw.Elapsed);
29
+
30
+ sw.Reset();
31
+ sw.Start();
32
+ for (int i = 0; i < LoopCount; i++) {
33
+ sb.Clear();
34
+ sb.Append(",");
35
+ sb.AppendLine(str1);
36
+ }
37
+ sw.Stop();
38
+ Console.WriteLine("StringBuilder.Append: " + sw.Elapsed);
39
+ ```
40
+ この結果、手元の環境 (Win10)で、
41
+ string.Join(): 5.0 秒 (4.98 ~ 5.03)
42
+ StringBuilder.Append(): 1.9 秒 (1.91 ~ 1.92)
43
+ となりました。
44
+
45
+ 環境、書き方の問題等はあると思いますが、参考までに。