|
●概要 この開発で行った高速化を一般論と、共通項目について説明する。個々の高速化については、以降の各技術解説で述べる。 ●VBは遅いか? 以前のVBはインタプリタ方式で、実行の度に翻訳され(多分、サブルーティンのお化け)ていて、実行速度は期待できなかったが、現在のVBは、コンパイル方式となっているので、都度の翻訳は無い。しかし、CPUネイティブなコードではなく、汎用の中間言語で実行される。 でも、実際の実行時には、CPUネイティブに翻訳される。インスタンスが継続実行される場合は、そのままネイティブ語で走る。システム関連、共通関数は.NET Framework にて関数群が供給される。これらは、十分に高速である。 しかし、マネージコードなので、メモリ空間チェック、データ型チェック、オブジェクトの寿命管理とリソースの自動取得、開放がバックグランドで走る。この分がオーバヘッドとなるが、コードが安全に走るための代償と思えば、お釣りがくる。特に、リソースの自動開放はご利益が大きい。この分を考慮すれば、VBはそれなりに速いと思っても良い。 86ネイティブコードには適わないまでも、純粋VBでの高速化は意味のあるアプローチと思っているが、C++を限定的に利用するアプローチも開始。限定的とは、主要な演算エンジンとしてである。 ●高速化の手法 今回適用した高速化は以下のようになっている。 ○アルゴリズムの改良 同じ結果になるより高速に演算できるアルゴリズムにする。
○コードの高速化 特に、カーネル部分のコードは重要で、少しの無駄が全体を支配する。以下のような方法をとっている。また、これらは、VBにおいても成立する。
○言語による高速化
●画像データの確保と戻し VBで最も遅くなる理由はこの部分である。演算自体はそんなに遅くはない。VBのGetPixel/SetPixel はあまりにも遅いので、画像を扱うメソッドでは、マーシャルクラスのアンマネージコードで処理している。
|