TokyoR24 - PerformanceRvsC#

1,775 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,775
On SlideShare
0
From Embeds
0
Number of Embeds
50
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

TokyoR24 - PerformanceRvsC#

  1. 1. 1
  2. 2. 発表者について ta2c = + +  名前:くらもと たつし ta2c  趣味:アイスクリームを食べる2 (年間350個)  仕事:表示層(UI層)の開発 (Adobe Flash, Microsoft Silverlightなど)
  3. 3. 発表者について ta2c = + +  なぜTokyo.Rにきたか?  大学院生のとき 時系列解析 を専攻3  今年R言語に出会い、興味を持った。 なにかお仕事で使えないか。
  4. 4. 今日のテーマについて パフォーマンス R vs C#4
  5. 5. 今日のテーマについて パフォーマンス R vs C# このテーマを選んだ理由5
  6. 6. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)6
  7. 7. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) Webブラウザ(HTML)7 Webブラウザの プラグイン デスクトップアプリ
  8. 8. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) JAVA PHP8 ASP.NET Perl
  9. 9. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) MySQL SQL Server9 PostgreSQL Oracle DB
  10. 10. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)1 [Excel]+R [Hadoop]+R [Oracle]+R0 [.NET]+R [Python]+R [C,C++]+R
  11. 11. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)1 [Excel]+R [Hadoop]+R [Oracle]+R1 [.NET]+R [Python]+R [C,C++]+R
  12. 12. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)1 [Excel]+R [Hadoop]+R [Oracle]+R2 [.NET]+R [Python]+R [C,C++]+R
  13. 13. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)1 [Excel]+R [Hadoop]+R [Oracle]+R3 [.NET]+R [Python]+R [C,C++]+R
  14. 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. 15. 今日のテーマについて パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)1 4. パフォーマンスの問題5
  16. 16. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)1 4. パフォーマンスの問題6
  17. 17. C#でRを動かすための準備 1. Visual C# 2010 Express 2. R.NET の2つのインストールを⾏う。17
  18. 18. C#でRを動かすための準備 それ以前に、 OSはWindows (xp,vista,7)18
  19. 19. C#でRを動かすための準備 Windows Mac Android iPhone 5% 4% 8% 2012年6⽉1ヶ⽉間 「忍者アクセス解析」 の国内シェア調査。1 83% (データ数4.6億)9 引用先:サムライファクトリー
  20. 20. C#でRを動かすための準備2 Windows以外の0 17%の人たち、ごめんなさい
  21. 21. C#でRを動かすための準備 1. Visual C# 2010 Express 2. R.NET の2つのインストールを⾏う。21
  22. 22. C#でRを動かすための準備 Visual C# 2010 Express ・マイクロソフトが提供する、 無料のC#開発環境。 ・製品版と比較すると機能が限定される (チーム連携不可、帳票作成不可など) ・使用期間制限は無し。 (ただし、30日以上使用するには、 ユーザー登録が必要)22 ※本発表で使用したアプリは、 Visual C# 2010 Expressで実装しました。
  23. 23. C#でRを動かすための準備 Visual C# 2010 Expressのインストール ※[VS 2010 Express] でネットで検索。23
  24. 24. C#でRを動かすための準備 Visual C# 2010 Expressのインストール ※[VS 2010 Express] でネットで検索。24
  25. 25. C#でRを動かすための準備 Visual C# 2010 Expressのインストール25
  26. 26. C#でRを動かすための準備 Visual C# 2010 Expressのインストール26
  27. 27. C#でRを動かすための準備 Visual C# 2010 Expressのインストール27
  28. 28. C#でRを動かすための準備 Visual C# 2010 Expressのインストール28
  29. 29. C#でRを動かすための準備29
  30. 30. C#でRを動かすための準備 R.NET30
  31. 31. C#でRを動かすための準備 R.NET から を 操作するための ライブラリ ・CodePlexで配布中。 ・ライセンス3 フリーソフト(LGPL2.1)1
  32. 32. C#でRを動かすための準備 R.NET から を 操作するための ライブラリ 開発者(家元): @kos59125 (名古屋在住)3 参考資料: 第13回Tokyo.R2 「Rと.NET Framework」 ※家元イメージ
  33. 33. C#でRを動かすための準備 R.NET 補足:最新版R (2.15.1)でつなげて みようとすると、「Rlapack.dllが 無いよ」というエラーになる33
  34. 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"))34
  35. 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. 36. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)3 4. パフォーマンスの問題6
  37. 37. 計測方法 > x <- 1:1000000 y <- 0 for (i in x) {y <- y + i}37
  38. 38. 計測方法 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} })38
  39. 39. 計測方法 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} })3 ユーザ システム 経過9 2.28 0.00 2.28
  40. 40. 計測方法 今回はC#で計測するので これは使用しない。 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} })4 ユーザ システム 経過0 2.28 0.00 2.28
  41. 41. パフォーマンス R vs C# 検証アプリについて41
  42. 42. 計測方法 ボタンクリック 計算開始 計算開始 計算終了 計算終了42 計測結果表示
  43. 43. 計測方法 ボタンクリック 開始日時 計算開始 計算開始 計算終了 計算終了4 終了日時3 ※この差分を 計測結果表示 計測結果とす る。
  44. 44. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)4 4. パフォーマンスの問題4
  45. 45. パフォーマンス R vs C# 表示(UI)層 作成 × ○4 統計処理 ○ ×5 1+1= ○ ○
  46. 46. パフォーマンス R vs C# RとC# どちらでも書ける処理 同じ処理をするのなら4 どちらが早いか?6
  47. 47. パフォーマンス R vs C#47
  48. 48. パフォーマンス R vs C#4 (n=1, 10, 100, 1000, 1万, 10万, …,100兆, 1000兆, 1京)8
  49. 49. パフォーマンス R vs C# (1) For文で加算する ‘For文で加算する’ (2) x <- 1:100000000 y <- 0 for (i in x) {y <- y + i}4 ‘ベクトルでsum’ x <- 1:1000000009 (3) s <- as.double(x) y <- sum(s)
  50. 50. パフォーマンス R vs C# 検証アプリについて50
  51. 51. パフォーマンス R vs C# 検証アプリについて51
  52. 52. パフォーマンス R vs C# 検証アプリについて52
  53. 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)53
  54. 54. パフォーマンス R vs C#54
  55. 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.4195 1億 0.384 × 2.3395 10億 3.674 × エラー 100億 21.001 × ×
  56. 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.4195 1億 0.384 × 2.3396 10億 3.674 × エラー 100億 21.001 × ×
  57. 57. パフォーマンス R vs C# 計測結果 sum() 30〜50倍早い57 For文
  58. 58. パフォーマンス R vs C# 計測結果 [1位] 6〜10倍早い [2位] sum() 30〜50倍早い58 [3位] For文
  59. 59. パフォーマンス R vs C#59
  60. 60. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)6 4. パフォーマンスの問題0
  61. 61. パフォーマンス R vs C# パフォーマンスの問題 (実際のお仕事で直面した)61
  62. 62. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発6 テスト2 納品/リリース
  63. 63. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発6 テスト パフォーマンス3 納品/リリース
  64. 64. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発6 テスト パフォーマンス4 納品/リリース
  65. 65. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発6 テスト パフォーマンス5 納品/リリース
  66. 66. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB)66
  67. 67. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理67
  68. 68. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理6 マシン性能 マシン性能 マシン性能8
  69. 69. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理6 マシン性能 マシン性能 マシン性能9 使いづらい
  70. 70. パフォーマンスの問題 [アプリが重たくなる主な要因] 通信量 通信量 処理 処理 処理7 マシン性能 マシン性能 マシン性能0 使いづらい
  71. 71. パフォーマンスの問題 [アプリが重たくなる主な要因] 通信量 通信量 処理 処理 処理7 マシン性能 マシン性能 マシン性能1 使いづらい
  72. 72. パフォーマンスの問題 重たい処理(場所)の特定 解決策検討 解決策の対応(実装)7 対応前後の比較2
  73. 73. パフォーマンスの問題 重たい処理(場所)の特定 解決策検討 解決策の対応(実装)7 対応前後の比較3
  74. 74. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移4 (対応前)12秒→
  75. 75. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(対応後)1.5秒  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→ (対応後)5秒7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移5 (対応前)12秒→ (対応後)2秒
  76. 76. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(対応後)1.5秒  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→ (対応後)5秒7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移6 (対応前)12秒→ (対応後)2秒
  77. 77. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(後)1.5秒 ※(主な対応) 表示処理を分割した。  事例27 ASP.NETで、ある一覧表示7 (対応前)70秒→(後)5秒 ※(主な対応) 取得列をしぼった。
  78. 78. パフォーマンスの問題 [発表者が直面した問題(例)]  事例3 C#(デスクトップアプリ)で 画面Aから画面Bに画面遷移 (対応前)12秒→(後)2秒 ※(主な対応) 画質を落とした78
  79. 79. まとめ パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…)7 4. パフォーマンスの問題9
  80. 80. まとめ80
  81. 81. まとめ 得意なことは、それに任せよう81
  82. 82. まとめ 得意なことは、それに任せよう8 でも、無茶は⽌めよう。2
  83. 83. まとめ 6〜10倍早い sum() 30〜50倍早い83 For文
  84. 84. まとめ 15人日 6〜10倍早い sum() 1人日 30〜50倍早い84 For文
  85. 85. まとめ 100万円 6〜10倍早い sum() 10万円 30〜50倍早い85 For文
  86. 86. まとめ テスト やり直し 6〜10倍早い テスト sum() 1人日 30〜50倍早い86 For文
  87. 87. まとめ 得意なことは、それに任せよう8 でも、無茶は⽌めよう。7
  88. 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/88
  89. 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=true89
  90. 90. 90
  91. 91. 91
  92. 92. 次回予告 1,2,3,4 <item> りんご,みかん <id>1</id> <name>りん 1,2,3,4 <item>9 りんご,みかん <id>1</id> <name>りん2

×