More Related Content Similar to TokyoR24 - PerformanceRvsC# Similar to TokyoR24 - PerformanceRvsC# (20) TokyoR24 - PerformanceRvsC#2. 発表者について
ta2c = + +
名前:くらもと たつし
ta2c
趣味:アイスクリームを食べる
2 (年間350個)
仕事:表示層(UI層)の開発
(Adobe Flash, Microsoft Silverlightなど)
3. 発表者について
ta2c = + +
なぜTokyo.Rにきたか?
大学院生のとき 時系列解析 を専攻
3 今年R言語に出会い、興味を持った。
なにかお仕事で使えないか。
6. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
6
7. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
Webブラウザ(HTML)
7 Webブラウザの
プラグイン
デスクトップアプリ
8. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
JAVA
PHP
8
ASP.NET
Perl
9. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
MySQL
SQL Server
9
PostgreSQL
Oracle DB
10. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
1
[Excel]+R [Hadoop]+R [Oracle]+R
0
[.NET]+R [Python]+R
[C,C++]+R
11. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
1
[Excel]+R [Hadoop]+R [Oracle]+R
1
[.NET]+R [Python]+R
[C,C++]+R
12. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
1
[Excel]+R [Hadoop]+R [Oracle]+R
2
[.NET]+R [Python]+R
[C,C++]+R
13. 今日のテーマについて
[3層アプリケーション]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
1
[Excel]+R [Hadoop]+R [Oracle]+R
3
[.NET]+R [Python]+R
[C,C++]+R
14. 今日のテーマについて
0.00% 5.00% 10.00% 15.00% 20.00%
C[1位] 17.73%
Java[2位] 16.27%
C++[3位] 9.36%
Objective-C[4位] 9.09%
C#[5位] 7.03%
(Visual) Basic[6位] 6.05%
PHP[7位] 5.29%
Python[8位] 3.85%
Perl[9位] 2.22%
1 Ruby[10位] 1.68%
4 R[30位] 0.44%
2012年6月プログラミング言語人気ランキング
引用先:TIOBE Software
15. 今日のテーマについて
パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
1 4. パフォーマンスの問題
5
16. パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
1 4. パフォーマンスの問題
6
17. C#でRを動かすための準備
1. Visual C# 2010 Express
2. R.NET
の2つのインストールを⾏う。
1
7
19. C#でRを動かすための準備
Windows Mac Android iPhone
5% 4%
8%
2012年6⽉1ヶ⽉間
「忍者アクセス解析」
の国内シェア調査。
1 83% (データ数4.6億)
9
引用先:サムライファクトリー
21. C#でRを動かすための準備
1. Visual C# 2010 Express
2. R.NET
の2つのインストールを⾏う。
2
1
22. C#でRを動かすための準備
Visual C# 2010 Express
・マイクロソフトが提供する、
無料のC#開発環境。
・製品版と比較すると機能が限定される
(チーム連携不可、帳票作成不可など)
・使用期間制限は無し。
(ただし、30日以上使用するには、
ユーザー登録が必要)
2
2 ※本発表で使用したアプリは、
Visual C# 2010 Expressで実装しました。
23. C#でRを動かすための準備
Visual C# 2010 Expressのインストール
※[VS 2010 Express] でネットで検索。
2
3
24. C#でRを動かすための準備
Visual C# 2010 Expressのインストール
※[VS 2010 Express] でネットで検索。
2
4
31. C#でRを動かすための準備
R.NET
から を
操作するための
ライブラリ
・CodePlexで配布中。
・ライセンス
3 フリーソフト(LGPL2.1)
1
32. C#でRを動かすための準備
R.NET
から を
操作するための
ライブラリ
開発者(家元):
@kos59125 (名古屋在住)
3 参考資料:
第13回Tokyo.R
2
「Rと.NET Framework」
※家元イメージ
33. C#でRを動かすための準備
R.NET 補足:最新版R (2.15.1)でつなげて
みようとすると、「Rlapack.dllが
無いよ」というエラーになる
3
3
34. C#でRを動かすための準備
R.NET 補足:最新版R (2.15.1)でつなげて
みようとすると、「Rlapack.dllが
無いよ」というエラーになる
REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386");
using (REngine engine = REngine.CreateInstance("RDotNet"))
3
4
35. C#でRを動かすための準備
R.NET 補足:最新版R (2.15.1)でつなげて
みようとすると、「Rlapack.dllが
無いよ」というエラーになる
REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386");
// Rlapack.dllがない問題対策スタート
string rhome = System.Environment.GetEnvironmentVariable("R_HOME");
if (string.IsNullOrEmpty(rhome))
rhome = @"C:¥Program Files¥R¥R-2.15.1";
3 System.Environment.SetEnvironmentVariable("R_HOME", rhome);
System.Environment.SetEnvironmentVariable("PATH",
System.Environment.GetEnvironmentVariable("PATH") + ";" + rhome +
5 @"¥bin¥i386");
// Rlapack.dllがない問題対策エンド
using (REngine engine = REngine.CreateInstance("RDotNet"))
36. パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
3 4. パフォーマンスの問題
6
37. 計測方法
>
x <- 1:1000000
y <- 0
for (i in x) {y <- y + i}
3
7
38. 計測方法
> system.time({
x <- 1:1000000
y <- 0
for (i in x) {y <- y + i}
})
3
8
39. 計測方法
> system.time({
x <- 1:1000000
y <- 0
for (i in x) {y <- y + i}
})
3
ユーザ システム 経過
9
2.28 0.00 2.28
40. 計測方法 今回はC#で計測するので
これは使用しない。
> system.time({
x <- 1:1000000
y <- 0
for (i in x) {y <- y + i}
})
4
ユーザ システム 経過
0
2.28 0.00 2.28
42. 計測方法
ボタンクリック
計算開始 計算開始
計算終了 計算終了
4
2 計測結果表示
43. 計測方法
ボタンクリック
開始日時
計算開始 計算開始
計算終了 計算終了
4 終了日時
3 ※この差分を
計測結果表示
計測結果とす
る。
44. パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
4 4. パフォーマンスの問題
4
48. パフォーマンス R vs C#
4 (n=1, 10, 100, 1000, 1万, 10万,
…,100兆, 1000兆, 1京)
8
49. パフォーマンス R vs C#
(1) For文で加算する
‘For文で加算する’
(2) x <- 1:100000000
y <- 0
for (i in x) {y <- y + i}
4 ‘ベクトルでsum’
x <- 1:100000000
9 (3) s <- as.double(x)
y <- sum(s)
53. パフォーマンス R vs C#
検証マシンについて
MacBook Pro 2300/13 MC700J/A
(発売年月:2011/2)
CPU: Intel Core i5 2.3GHz
メモリ: 8GB (DDR3 PC3-10600)
OS: Windows 7 SP1 64bit (Ultimate)
5
3
55. パフォーマンス R vs C#
計測結果 単位:秒(1000分の1秒単位で計測)
C# R(Loop) R(sum)
1万 0 0.029 0.001
10万 0.001 0.286 0.002
100万 0.004 2.672 0.084
1000万 0.039 22.621 0.419
5 1億 0.384 × 2.339
5 10億 3.674 × エラー
100億 21.001 × ×
56. パフォーマンス R vs C#
計測結果
C# R(Loop) R(sum)
1万 0 0.029 0.001
10万 0.001 0.286 0.002
100万 0.004 2.672 0.084
1000万 0.039 22.621 0.419
5 1億 0.384 × 2.339
6 10億 3.674 × エラー
100億 21.001 × ×
58. パフォーマンス R vs C#
計測結果
[1位]
6〜10倍早い
[2位] sum()
30〜50倍早い
5
8
[3位] For文
60. パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
6 4. パフォーマンスの問題
0
62. パフォーマンスの問題
[アプリケーションの工程(ウォーターフォール)]
要件定義
設計
開発
6 テスト
2
納品/リリース
63. パフォーマンスの問題
[アプリケーションの工程(ウォーターフォール)]
要件定義
設計
開発
6 テスト パフォーマンス
3
納品/リリース
64. パフォーマンスの問題
[アプリケーションの工程(ウォーターフォール)]
要件定義
設計
開発
6 テスト パフォーマンス
4
納品/リリース
65. パフォーマンスの問題
[アプリケーションの工程(ウォーターフォール)]
要件定義
設計
開発
6 テスト パフォーマンス
5
納品/リリース
66. パフォーマンスの問題
[アプリが重たくなる主な要因]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
6
6
67. パフォーマンスの問題
[アプリが重たくなる主な要因]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
処理 処理 処理
6
7
68. パフォーマンスの問題
[アプリが重たくなる主な要因]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
処理 処理 処理
6 マシン性能 マシン性能 マシン性能
8
69. パフォーマンスの問題
[アプリが重たくなる主な要因]
表示層 アプリケーション層 データ層
(UI) (ビジネスロジック) (DB)
処理 処理 処理
6 マシン性能 マシン性能 マシン性能
9 使いづらい
70. パフォーマンスの問題
[アプリが重たくなる主な要因]
通信量 通信量
処理 処理 処理
7 マシン性能 マシン性能 マシン性能
0 使いづらい
71. パフォーマンスの問題
[アプリが重たくなる主な要因]
通信量 通信量
処理 処理 処理
7 マシン性能 マシン性能 マシン性能
1 使いづらい
72. パフォーマンスの問題
重たい処理(場所)の特定
解決策検討
解決策の対応(実装)
7 対応前後の比較
2
73. パフォーマンスの問題
重たい処理(場所)の特定
解決策検討
解決策の対応(実装)
7 対応前後の比較
3
74. パフォーマンスの問題
[発表者が直面した問題(例)]
事例1
Adobe Flash で、ある一覧表示
(対応前)40秒→
事例2
ASP.NETで、ある一覧表示
(対応前)70秒→
7 事例3
C#(デスクトップアプリ)で画面Aから画面Bに遷移
4 (対応前)12秒→
75. パフォーマンスの問題
[発表者が直面した問題(例)]
事例1
Adobe Flash で、ある一覧表示
(対応前)40秒→(対応後)1.5秒
事例2
ASP.NETで、ある一覧表示
(対応前)70秒→ (対応後)5秒
7 事例3
C#(デスクトップアプリ)で画面Aから画面Bに遷移
5 (対応前)12秒→ (対応後)2秒
76. パフォーマンスの問題
[発表者が直面した問題(例)]
事例1
Adobe Flash で、ある一覧表示
(対応前)40秒→(対応後)1.5秒
事例2
ASP.NETで、ある一覧表示
(対応前)70秒→ (対応後)5秒
7 事例3
C#(デスクトップアプリ)で画面Aから画面Bに遷移
6 (対応前)12秒→ (対応後)2秒
77. パフォーマンスの問題
[発表者が直面した問題(例)]
事例1
Adobe Flash で、ある一覧表示
(対応前)40秒→(後)1.5秒
※(主な対応) 表示処理を分割した。
事例2
7 ASP.NETで、ある一覧表示
7 (対応前)70秒→(後)5秒
※(主な対応) 取得列をしぼった。
78. パフォーマンスの問題
[発表者が直面した問題(例)]
事例3
C#(デスクトップアプリ)で
画面Aから画面Bに画面遷移
(対応前)12秒→(後)2秒
※(主な対応) 画質を落とした
7
8
79. まとめ
パフォーマンス R vs C#
1. C#でRを動かすための準備
2. 計測方法
3. R vs C# (1+2+…)
7 4. パフォーマンスの問題
9
81. まとめ
得意なことは、それに任せよう
8
1
82. まとめ
得意なことは、それに任せよう
8
でも、無茶は⽌めよう。
2
83. まとめ
6〜10倍早い
sum()
30〜50倍早い
8
3 For文
84. まとめ
15人日
6〜10倍早い
sum() 1人日
30〜50倍早い
8
4 For文
85. まとめ
100万円
6〜10倍早い
sum() 10万円
30〜50倍早い
8
5 For文
86. まとめ
テスト
やり直し
6〜10倍早い
テスト
sum() 1人日
30〜50倍早い
8
6 For文
87. まとめ
得意なことは、それに任せよう
8
でも、無茶は⽌めよう。
7
88. 参考文献(1)
2012年6⽉プログラミング言語人気ランキング
http://www.tiobe.com/index.php/content/paperinf
o/tpci/
2012年6⽉「忍者アクセス解析」の国内シェア調査
http://www.samurai-factory.jp/info/2012
/20120703286.html
R.NET
http://rdotnet.codeplex.com/
Visual C# 2010 Express
http://www.microsoft.com/ja-
jp/dev/2010/product/express/
8
8
89. 参考文献(2)
第13回Tokyo.R「Rと.NET Framework」
(@kos59125)
https://docs.google.com/a/recyclebin.jp/viewer?a
=v&pid=explorer&srcid=0B3zrAV1SplSBOGRkYmRj
YWQtYWUwNi00MWIwLTg2N2ItMGQ3OGFlM2UwYj
U2&hl=en&chrome=true
8
9
92. 次回予告
1,2,3,4 <item>
りんご,みかん <id>1</id>
<name>りん
1,2,3,4 <item>
9 りんご,みかん <id>1</id>
<name>りん
2