1
発表者について
      ta2c =              +          +


     名前:くらもと        たつし
                     ta2c
     趣味:アイスクリームを食べる
2        (年間350個)
     仕事:表示層(UI層)の開発
      (Adobe Flash, Microsoft Silverlightなど)
発表者について
     ta2c =      +     +


     なぜTokyo.Rにきたか?

      大学院生のとき 時系列解析 を専攻
3     今年R言語に出会い、興味を持った。
      なにかお仕事で使えないか。
今日のテーマについて

    パフォーマンス R vs C#




4
今日のテーマについて

    パフォーマンス R vs C#

         このテーマを選んだ理由



5
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




6
今日のテーマについて
    [3層アプリケーション]
     表示層      アプリケーション層     データ層
     (UI)     (ビジネスロジック)     (DB)




            Webブラウザ(HTML)
7           Webブラウザの
            プラグイン

            デスクトップアプリ
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




               JAVA
                PHP
8
              ASP.NET
                Perl
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層     データ層
     (UI)   (ビジネスロジック)     (DB)




                           MySQL
                         SQL Server
9
                         PostgreSQL
                          Oracle DB
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
0
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
1
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
2
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
3
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
                    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
今日のテーマについて

    パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
1   4.   パフォーマンスの問題
5
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
1   4.   パフォーマンスの問題
6
C#でRを動かすための準備



     1. Visual C# 2010 Express
     2. R.NET

      の2つのインストールを⾏う。
1
7
C#でRを動かすための準備



     それ以前に、
     OSはWindows (xp,vista,7)


1
8
C#でRを動かすための準備
          Windows   Mac    Android   iPhone

           5% 4%
     8%

                             2012年6⽉1ヶ⽉間
                             「忍者アクセス解析」
                             の国内シェア調査。
1                   83%      (データ数4.6億)

9

                          引用先:サムライファクトリー
C#でRを動かすための準備




2
         Windows以外の
0
      17%の人たち、ごめんなさい
C#でRを動かすための準備



     1. Visual C# 2010 Express
     2. R.NET

      の2つのインストールを⾏う。
2
1
C#でRを動かすための準備
     Visual C# 2010 Express
      ・マイクロソフトが提供する、
       無料のC#開発環境。
      ・製品版と比較すると機能が限定される
      (チーム連携不可、帳票作成不可など)
      ・使用期間制限は無し。
      (ただし、30日以上使用するには、
       ユーザー登録が必要)
2
2     ※本発表で使用したアプリは、
      Visual C# 2010 Expressで実装しました。
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール

    ※[VS   2010   Express] でネットで検索。




2
3
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール

    ※[VS   2010   Express] でネットで検索。




2
4
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
5
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
6
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
7
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
8
C#でRを動かすための準備




2
9
C#でRを動かすための準備




       R.NET


3
0
C#でRを動かすための準備
     R.NET
       から     を
    操作するための
    ライブラリ

    ・CodePlexで配布中。
    ・ライセンス
3   フリーソフト(LGPL2.1)
1
C#でRを動かすための準備
     R.NET
       から      を
    操作するための
    ライブラリ

    開発者(家元):
     @kos59125 (名古屋在住)
3   参考資料:
     第13回Tokyo.R
2
    「Rと.NET Framework」
                         ※家元イメージ
C#でRを動かすための準備
     R.NET 補足:最新版R (2.15.1)でつなげて
            みようとすると、「Rlapack.dllが
            無いよ」というエラーになる




3
3
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
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"))
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
3   4.   パフォーマンスの問題
6
計測方法


     >
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
3
7
計測方法


     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
3
8
計測方法


     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
3
       ユーザ システム                経過
9
          2.28       0.00     2.28
計測方法                   今回はC#で計測するので
                            これは使用しない。




     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
4
       ユーザ システム                経過
0
          2.28       0.00     2.28
パフォーマンス R vs C#
     検証アプリについて




4
1
計測方法

      ボタンクリック



       計算開始     計算開始

       計算終了     計算終了
4
2     計測結果表示
計測方法

      ボタンクリック
                開始日時

       計算開始      計算開始

       計算終了      計算終了
4                  終了日時
3               ※この差分を
      計測結果表示
                 計測結果とす
                 る。
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
4   4.   パフォーマンスの問題
4
パフォーマンス R vs C#




     表示(UI)層
       作成      ×      ○
4
     統計処理      ○      ×
5     1+1=     ○      ○
パフォーマンス R vs C#

     RとC# どちらでも書ける処理



       同じ処理をするのなら
4       どちらが早いか?
6
パフォーマンス R vs C#




4
7
パフォーマンス R vs C#




4 (n=1, 10, 100, 1000, 1万, 10万,
                   …,100兆, 1000兆, 1京)
8
パフォーマンス 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)
パフォーマンス R vs C#
     検証アプリについて




5
0
パフォーマンス R vs C#
     検証アプリについて




5
1
パフォーマンス R vs C#
     検証アプリについて




5
2
パフォーマンス 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
パフォーマンス R vs C#




5
4
パフォーマンス 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     ×          ×
パフォーマンス 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     ×          ×
パフォーマンス R vs C#
     計測結果




                sum()
               30〜50倍早い
5
7
                For文
パフォーマンス R vs C#
     計測結果
     [1位]
               6〜10倍早い


     [2位]       sum()
               30〜50倍早い
5
8
     [3位]       For文
パフォーマンス R vs C#




5
9
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
6   4.   パフォーマンスの問題
0
パフォーマンス R vs C#


      パフォーマンスの問題
    (実際のお仕事で直面した)
6
1
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト
2
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
3
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
4
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
5
       納品/リリース
パフォーマンスの問題
    [アプリが重たくなる主な要因]

     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




6
6
パフォーマンスの問題
    [アプリが重たくなる主な要因]

     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




      処理       処理         処理
6
7
パフォーマンスの問題
    [アプリが重たくなる主な要因]

      表示層    アプリケーション層    データ層
      (UI)   (ビジネスロジック)    (DB)




       処理       処理         処理
6    マシン性能    マシン性能       マシン性能
8
パフォーマンスの問題
    [アプリが重たくなる主な要因]

      表示層    アプリケーション層    データ層
      (UI)   (ビジネスロジック)    (DB)




       処理       処理         処理
6    マシン性能    マシン性能       マシン性能
9    使いづらい
パフォーマンスの問題
    [アプリが重たくなる主な要因]

             通信量           通信量




       処理            処理           処理
7    マシン性能         マシン性能         マシン性能
0    使いづらい
パフォーマンスの問題
    [アプリが重たくなる主な要因]

             通信量           通信量




       処理            処理           処理
7    マシン性能         マシン性能         マシン性能
1    使いづらい
パフォーマンスの問題


        重たい処理(場所)の特定

           解決策検討

         解決策の対応(実装)

7         対応前後の比較
2
パフォーマンスの問題


        重たい処理(場所)の特定

           解決策検討

         解決策の対応(実装)

7         対応前後の比較
3
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
4    (対応前)12秒→
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(対応後)1.5秒
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→ (対応後)5秒
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
5    (対応前)12秒→ (対応後)2秒
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(対応後)1.5秒
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→ (対応後)5秒
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
6    (対応前)12秒→ (対応後)2秒
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(後)1.5秒
     ※(主な対応) 表示処理を分割した。

     事例2
7    ASP.NETで、ある一覧表示
7    (対応前)70秒→(後)5秒
     ※(主な対応) 取得列をしぼった。
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例3
     C#(デスクトップアプリ)で
     画面Aから画面Bに画面遷移
     (対応前)12秒→(後)2秒
     ※(主な対応) 画質を落とした

7
8
まとめ

    パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
7   4.   パフォーマンスの問題
9
まとめ




8
0
まとめ




    得意なことは、それに任せよう
8
1
まとめ




    得意なことは、それに任せよう
8
      でも、無茶は⽌めよう。
2
まとめ


      6〜10倍早い


            sum()
      30〜50倍早い
8
3           For文
まとめ

                      15人日
      6〜10倍早い


            sum()   1人日
      30〜50倍早い
8
4           For文
まとめ

                      100万円
      6〜10倍早い


            sum()   10万円
      30〜50倍早い
8
5           For文
まとめ
                       テスト
                      やり直し
      6〜10倍早い

                    テスト
            sum()   1人日
      30〜50倍早い
8
6           For文
まとめ




    得意なことは、それに任せよう
8
      でも、無茶は⽌めよう。
7
参考文献(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
参考文献(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
9
0
9
1
次回予告

     1,2,3,4 <item>
     りんご,みかん  <id>1</id>
              <name>りん




     1,2,3,4 <item>
9    りんご,みかん  <id>1</id>
              <name>りん
2

TokyoR24 - PerformanceRvsC#

  • 1.
  • 2.
    発表者について ta2c = + +  名前:くらもと たつし ta2c  趣味:アイスクリームを食べる 2 (年間350個)  仕事:表示層(UI層)の開発 (Adobe Flash, Microsoft Silverlightなど)
  • 3.
    発表者について ta2c = + +  なぜTokyo.Rにきたか?  大学院生のとき 時系列解析 を専攻 3  今年R言語に出会い、興味を持った。 なにかお仕事で使えないか。
  • 4.
    今日のテーマについて パフォーマンス R vs C# 4
  • 5.
    今日のテーマについて パフォーマンス R vs C# このテーマを選んだ理由 5
  • 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 vsC# 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
  • 18.
    C#でRを動かすための準備 それ以前に、 OSはWindows (xp,vista,7) 1 8
  • 19.
    C#でRを動かすための準備 Windows Mac Android iPhone 5% 4% 8% 2012年6⽉1ヶ⽉間 「忍者アクセス解析」 の国内シェア調査。 1 83% (データ数4.6億) 9 引用先:サムライファクトリー
  • 20.
    C#でRを動かすための準備 2 Windows以外の 0 17%の人たち、ごめんなさい
  • 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
  • 25.
    C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 5
  • 26.
    C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 6
  • 27.
    C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 7
  • 28.
    C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 8
  • 29.
  • 30.
  • 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 vsC# 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
  • 41.
    パフォーマンス R vsC# 検証アプリについて 4 1
  • 42.
    計測方法 ボタンクリック 計算開始 計算開始 計算終了 計算終了 4 2 計測結果表示
  • 43.
    計測方法 ボタンクリック 開始日時 計算開始 計算開始 計算終了 計算終了 4 終了日時 3 ※この差分を 計測結果表示 計測結果とす る。
  • 44.
    パフォーマンス R vsC# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 4 4. パフォーマンスの問題 4
  • 45.
    パフォーマンス R vsC# 表示(UI)層 作成 × ○ 4 統計処理 ○ × 5 1+1= ○ ○
  • 46.
    パフォーマンス R vsC# RとC# どちらでも書ける処理 同じ処理をするのなら 4 どちらが早いか? 6
  • 47.
  • 48.
    パフォーマンス R vsC# 4 (n=1, 10, 100, 1000, 1万, 10万, …,100兆, 1000兆, 1京) 8
  • 49.
    パフォーマンス R vsC# (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)
  • 50.
    パフォーマンス R vsC# 検証アプリについて 5 0
  • 51.
    パフォーマンス R vsC# 検証アプリについて 5 1
  • 52.
    パフォーマンス R vsC# 検証アプリについて 5 2
  • 53.
    パフォーマンス R vsC# 検証マシンについて 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
  • 54.
  • 55.
    パフォーマンス R vsC# 計測結果 単位:秒(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 vsC# 計測結果 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 × ×
  • 57.
    パフォーマンス R vsC# 計測結果 sum() 30〜50倍早い 5 7 For文
  • 58.
    パフォーマンス R vsC# 計測結果 [1位] 6〜10倍早い [2位] sum() 30〜50倍早い 5 8 [3位] For文
  • 59.
  • 60.
    パフォーマンス R vsC# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 6 4. パフォーマンスの問題 0
  • 61.
    パフォーマンス R vsC# パフォーマンスの問題 (実際のお仕事で直面した) 6 1
  • 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
  • 80.
  • 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
  • 90.
  • 91.
  • 92.
    次回予告 1,2,3,4 <item> りんご,みかん <id>1</id> <name>りん 1,2,3,4 <item> 9 りんご,みかん <id>1</id> <name>りん 2