DLR言語によるSilverlightプログラミング
Silverlightを囲む会in名古屋#3での発表資料を公開しました。
DLR言語によるSilverlighプログラミング
View more presentations from terurou.
Silverlight 4とGestalt(IronPython 2.6)とFlash Player 10.1のベンチマーク比較
スライド中でも紹介してますが、Silverlight4とGestalt(IronPython)とFlash Player 10.1のベンチマークを取って比較してみました。
ベンチマーク内容
以下のような内容を実施しました。
- ランタイム自体の速度差
- フィボナッチ数(再帰)
- フィボナッチ数(ループ)
- レンダリングパフォーマンスの差
- 四角形を繰り返し表示
- 文字列を繰り返し表示
- 両方
Silverlight(C#)用のベンチマークコードの抜粋
// フィボナッチ数(再帰) private long Fib(int n) { if (n <= 2) return 1; return Fib(n - 1) + Fib(n - 2); } // フィボナッチ数(ループ) private long Fib2(int n) { if (n <= 2) return 1; var list = new List<long>() { 1, 1 }; for (var i = 2; i < n; i++) { list.Add(list[i - 2] + list[i - 1]); } return list[list.Count - 1]; } // 四角形の描画 var rect = new Rectangle(); rect.Fill = new SolidColorBrush(Colors.Red); rect.Width = 10; rect.Height = 10; Canvas.SetLeft(rect, i); Canvas.SetTop(rect, i); LayoutRoot.Children.Add(rect); // 文字列の描画 var text = new TextBlock(); text.Text = "hello world"; Canvas.SetLeft(text, i); Canvas.SetTop(text, i); LayoutRoot.Children.Add(text);
Gestalt(IronPython2.6)用のベンチマークコードの抜粋
# フィボナッチ数(再帰) def fib(n): if n <= 2: return 1 return fib(n-1) + fib(n-2); # フィボナッチ数(ループ) def fib2(n): if n <= 2: return 1 list = [1, 1] for i in range(2, n): list.append(list[i-2] + list[i-1]) return list[len(list)-1] # 四角形の描画 rect = Rectangle() rect.Fill = SolidColorBrush(Colors.Red) rect.Width = 10 rect.Height = 10 Canvas.SetLeft(rect, i) Canvas.SetTop(rect, i) me.Children.Add(rect) # 文字列の描画 text = TextBlock() text.Text = 'hello world' Canvas.SetLeft(text, i) Canvas.SetTop(text, i) me.Children.Add(text)
Flash Player 10.1用のベンチマークコードの抜粋
// フィボナッチ数(再帰) function fib(n:int):int { if (n <= 2) return 1; return fib(n-1) + fib(n-2); } // フィボナッチ数(ループ) function fib2(n:int):int { if (n <= 2) return 1; var list:Array = [1, 1]; for (var i:int = 2; i < n; i++) { list[i] = list[i-2] + list[i-1]; } return list[list.length - 1]; } // 四角形の描画 canvas.graphics.beginFill(0xff0000); canvas.graphics.drawRect(i, i, 10, 10); canvas.graphics.endFill(); // 文字列の描画 var label:Label = new Label(); label.text = "hello world"; label.x = i; label.y = i; label.width = 100; label.height = 20 ; canvas.addChild(label);
ベンチマーク実施環境
VAIO type Z(2世代前のモデル)
- Windows 7 Professional
- Core 2 Duo P9700(2.8GHz)
- 6GB Memory
- NVIDIA GeForce 9300M GS
ベンチマーク結果
- 表中の単位はミリ秒
- *1:実際には10秒程度描画されず
- *2:実際には2分以上描画されず
- Silverlightは非常に高速
- Flash Player10.1で図形描画が超高速化
- Flash Player 10の頃のベンチマーク(http://d.hatena.ne.jp/terurou/20081210/1228840074)
- 以前は1万個の図形描画で危なかった
- 総合的に判断するとSilverlight+IronPythonはFlashといい勝負をしている
- C#と比較すると遅いが、IronPythonは十分使えるパフォーマンス
Macで同様のベンチマークを取ると違う結果になるかもしれませんが、私はMac持ってないのでテストしようがありません。