スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VB.netの実行速度 

突然ですが、VB.netって知ってますか?
VB.netとはVisualBasic.NETの略で、プログラミング言語なんです。
えーと、まず、VB.netの歴史から。
まず、VB.netの先祖に、VisualBasicってのがあるんです。略称VB。
こいつは、最初、インタープリター言語だったんです。
インタプリタとは、ソースコードを解析しながら実行するやり方です。(プリンターではないよ)
そのため、ゆっくりです。
その後、バージョンがあがり、コンパイルして実行されるやり方になりました。
この方式は、相当高速で機械語に変換されるので、直接CPUが解釈して実行されます。
また、VBの先祖に、Basicってのがあります。こいつもインタープリター言語で、Windows用ではなく、専用のマシンがありました。派生がたくさんあって、有名なのが、N88Basicでしょうか。

さて、歴史を説明しましたが、インタプリタやら、コンパイルやら出てきましたね。
VB.netはどの方式なのでしょうか。
答えは、どちらでもない、です。
VB.netは、ジャストインタイム方式(JIT)を使用しています。
JITとは、中間言語と呼ばれる中途半端な言語(コンピュータも人間も読めない)にコンパイルしておき、実行時に、JITコンパイラが、機械語に一括変換して実行する方式です。VB.netは、.NET FrameworkというJITコンパイラを使います。
メリットは、機械語に直接ならないので、環境の違いに柔軟な対応ができることなどです。
この方式は、Javaなどでも取り入れられています。ただし、VB.netのほうが高速です。
理由は、.NET Frameworkのほうが、Windowsに最適化されているからです。

まぁ、それはそれとして。
この、.NET Frameworkを使った言語には、他にもC#があります。
このC#、たびたびVB.netより高速だと思っている人いるようですが、それは誤解です。
誤解の理由としては、もともと、VB.netの先祖がインタープリタだったので、VBシリーズ=低速という古くさい固定観念を持っているから。
または、機械語にコンパイルされない=インタプリタゆえに低速というJITを知らない人の誤った解釈によるものです。
C#も、.NET Frameworkを利用しますから、速度は一緒です。
ただ、VB.netのほうが、型について規制がC#に比べやさしいので、型変換を頻繁に行ってしまうような、低速なプログラムを書いてしまいやすいということです。
ちなみに、従来のVBを使って機械語にコンパイルしたものと、VB.netで書いたものを実行して、速度を比べると、VB.netがわずかな差で勝利します。C#でも一緒です。
でもやっぱり、言語形態自体が機械語に近いC言語が最速ですかねえ。
ただ、まれにCPUとの相性によっては、環境に最適な機械語を生成できる.NET Frameworkの方が速い場合もありますが。

結論
VB.netの速度を多言語と比べると、
VB(インタプリタ)<Java<VB(機械語)<VB.net<=C#<=C
となり、VB.netは決して遅くありません。
まぁ、いまの時代、CPU自体が速いので、どの言語を使っても、常識の範囲のサイズのプログラムであれば、人間が感じられるほど速度差は出ないので、慣れている言語を使うのが一番かなと思います。

コメント

通りすがりのものです。VB、JAVA、C++のどれにすべきか悩んでいたので、参考になりました。慣れた言語が一番という結論に納得です。ただし、スピードが必要になるプログラムを書かなければならない状況に直面しているので、慣れた言語は使用不能です。さて、どうすべきか。
参考になりました by 通りすがりのもの [2009/12/11]
>>通りすがりのもの さんへ
コメントありがとうございます。

プラットフォームが限定され、実行速度が求められるのであれば、一般的にC/C++がよいでしょう。
ただし、同じC/C++でもコンパイラによっては実行速度が大きく変わってきます。
たとえば、Microsoft Visual C++(以下VC)のコンパイラの場合、コンパイルに時間がかかりますが、実行速度ではトップクラスです。
しかし、Borland C++ Compiler(以下BCC)の場合、コンパイルは高速ですが、実行速度はゆっくりです。つまり、コードの最適化に時間をかけていません。
私は、デバッグはBCC、リリースビルドはVCで。という様に使い分けることもあります。
また、これはWindows上での話であり、Linuxなどではどうなるのかわかりません。少なくとも、VCが吐いたバイナリは実行できないはずです。
速度を求めるなら、それに見合ったプラットフォームとそのプラットフォーム向けのバイナリを吐ける最適化処理の優秀なコンパイラを探すとよいでしょう。
Re:参考になりました by KOBA789 [2009/12/11]

コメントを投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://trainfandiary.blog14.fc2.com/tb.php/6-70974de8

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。