« 「ブラックジャックによろしく」休載の裏側 | メイン | FinePix F200EXR »

2009年03月08日

.NET Framework 2.0 の GUI の遅さ

忙しくてなかなか試せなかったことをやっと試せました。結果としては予測のとおりというか、一般に言われている C# は遅いとか .NET は遅いとかはそのとおりで、特に GUI は遅いです。(この辺はもう言うまでも無いことですね。)

ではどうすればいいか(高速化可能か)というと、これって難しい問題です。試したのは 2.0 環境で、ここでは System.Windows.Forms の実装を別の実装に変えなければダメ、という結論になると思います。以下が検証パターンです。

  1. 単純にボタン(System.Windows.Forms.Button) をフォーム(System.Windows.Forms.Form) に並べただけのもの
  2. フォームに DllImport 経由で CreateWindow で作ったネイティブボタンを並べたもの
  3. ウィンドウ及びボタンも C# から CreateWindow を経由で作成したもの
の動作で試しました。2 がそれなりに高速化しているのが意外でした。3 に関しては、もはやこれを C# プログラムと呼んでいいのか謎です(Windows form プログラムではもうないですね)。Win32API に C# のラッパーをかけただけの状態といえますが、やはり高速です。

誰かが頑張って System.Windows.Forms に変わるフォームの実装をネイティブで行い、C# からは従来の Form のように使えれば乗り換えは楽だろうな、とは思いますが。。これだけ .NET が遅いといわれ続けているにもかかわらずどんな実装も現れない(少なくとも私は未確認な)ところを見ると、誰もやっていないんでしょうね。サードパーティ製の GUI コンポーネントは System.Windows.Forms の上に構築されるものばかりですし。

この Win32 ラッパー (いわゆる class NativeMethods) でちょっと遊んでみようとも思ったんですが、非常な徒労になりそうなんでこの休みだけで止めようと思ってます。WPF も速いとは言えないですし、いろんな環境が生まれはしますがやはりネイティブには勝てないですね。高速な System.Windows.Forms に変わるものがあったらご紹介ください:-)


投稿者 napier : 2009年03月08日 19:07


トラックバック

このエントリーのトラックバックURL:
http://will.squares.net/mt/mt-modified-tb.cgi/979