先日書いたコラム「.NET Frameworkアプリは遅い?」に記載されている情報「Ngen.exe」について意外にも多くの方がサーチしていることがわかりました。それだけ、.NET
Frameworkアプリの遅さに不満を持っている開発者が多いということであると言えます。
さて、「Ngen.exe」の効果ですが、どうやらOSを再起動するとネイティブイメージを作成してあったとしても速度が落ちる気がします。気のせいでしょうかね?
そこで、簡単なウィンドウが表示されるアプリケーションを作成し、起動時間を計ってみました。
.NET Frameworkアプリは起動に約8秒かかりましたが、Win32 API(C/C++)で作成したウィンドウは2、3秒で起動しました。この時点ですでに2倍以上の時間差があります。単純に考えても.NET
FrameworkアプリはC/C++アプリに比べて2倍遅いということになります。
考えてみたら.NET Frameworkアプリではきびきび動作しているイメージは持ったことがないです。ただし、GUIアプリに関しては「Javaよりは速いかな」位には感じています。(苦笑)
Visual C++でWin32アプリを開発してみるとC#、Javaに比べると非常に分かりにくくなっています。元々C++の言語仕様がわかりにくい部分があるのは事実ですが、Win32
APIではやたらとtypedefで新しい型が定義されているため、わかりにくさを倍増しています。
さらに、C#、JavaからC++に移行した私としては、日本語のドキュメントがほとんどないという事実に驚かされました。オンラインドキュメントやマイクロソフトのMSDNページでWin32
APIの関数などをサーチしても英語のドキュメントしかありません。さらに、もし日本語ドキュメントがあっても必要なライブラリ(ソース内で指定しないとエラーになる)
が記載されていなかったりします。(英語版は記載されています。) 英語版についても関数を並べているだけでサンプルが無く、使い方がさっぱりわからないものが多数あります。
このように、Visual C++での開発が敬遠される理由としては、ドキュメントが少なすぎることが第一なのではないかと考えています。このことについてはマイクロソフトから「書籍を買えばわかる」と暗にいわれている気がしてなりませんし、オンラインドキュメントにも書籍紹介ページが存在します。
これらの点さえクリアできればVisual C++開発者はもっと増えると思うし、(開発効率は考えなければ)実行環境上で低速で動作するために不満が残る.NET
FrameworkアプリやJavaアプリなどから解放されることでしょう。
確かにJava、.NET Frameworkはライブラリがわかりやすく開発効率が良いのですが、C/C++の速さを知ってしまうと「何が悲しくてJavaや.NET
Frameworkでの開発をしなくてはいけないのか?」という疑問さえ出てきます。Java、.NET Frameworkでの高速稼動は当分難しいと考えているので、その間高速アプリはC/C++が主流なことには変わりはないでしょう。
次期WindowsのLonghornでは.NET FrameworkとWin32 APIは同レベルになるらしいのですが、今度はWin32アプリまで遅くならないことを願います。.NET
Frameworkの遅さを考慮してC/C++を始めたのですから。(苦笑)