回答編集履歴
1
CSV
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
とりあえず`benchmark-ips`を用いてベンチマーク取ってみました。
|
2
|
+
|
3
|
+
**追記:** `to_csv`が遅い理由がわかったのでCSV.newを使ってみるものを追加
|
2
4
|
|
3
5
|
|
4
6
|
|
@@ -18,6 +20,16 @@
|
|
18
20
|
|
19
21
|
x.report("join") { array.map{|ary| ary.join ','}.join }
|
20
22
|
|
23
|
+
x.report("CSV"){
|
24
|
+
|
25
|
+
csv = CSV.new ""
|
26
|
+
|
27
|
+
array.each{|it| csv << it }
|
28
|
+
|
29
|
+
csv.string
|
30
|
+
|
31
|
+
}
|
32
|
+
|
21
33
|
# CSVではないが参考までにMarshal.dump (Rubyのデータ吐き出し系では最速のハズ)
|
22
34
|
|
23
35
|
x.report("marshal"){ Marshal.dump array }
|
@@ -36,21 +48,25 @@
|
|
36
48
|
|
37
49
|
Calculating -------------------------------------
|
38
50
|
|
39
|
-
to_csv 0.21
|
51
|
+
to_csv 0.218 (± 0.0%) i/s - 2.000 in 9.170508s
|
40
52
|
|
41
|
-
join 5.
|
53
|
+
join 5.510 (± 0.0%) i/s - 28.000 in 5.094200s
|
42
54
|
|
55
|
+
CSV 2.628 (± 0.0%) i/s - 14.000 in 5.329939s
|
56
|
+
|
43
|
-
marshal 8.
|
57
|
+
marshal 8.665 (± 0.0%) i/s - 44.000 in 5.081920s
|
44
58
|
|
45
59
|
|
46
60
|
|
47
61
|
Comparison:
|
48
62
|
|
49
|
-
marshal: 8.
|
63
|
+
marshal: 8.7 i/s
|
50
64
|
|
51
|
-
join: 5.
|
65
|
+
join: 5.5 i/s - 1.57x slower
|
52
66
|
|
67
|
+
CSV: 2.6 i/s - 3.30x slower
|
68
|
+
|
53
|
-
to_csv: 0.2 i/s - 3
|
69
|
+
to_csv: 0.2 i/s - 39.68x slower
|
54
70
|
|
55
71
|
```
|
56
72
|
|
@@ -59,3 +75,21 @@
|
|
59
75
|
と、「配列を回す」というよりは「to_csv」が遅い
|
60
76
|
|
61
77
|
という結果になりました。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
---
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
`to_csv`は1行ごとに
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
|
89
|
+
(CSV.new("") << row).string
|
90
|
+
|
91
|
+
```
|
92
|
+
|
93
|
+
を行うため
|
94
|
+
|
95
|
+
複数行を手に入れるために複数回繰り返すのは完全に無駄です。
|