• 締切済み

VB.netでの動的配列の扱い

VB.net 2003で開発を行っています。 コード内で動的配列を多用しているんですが(要素数 2000000以上)、一度 ReDim でメモリ確保した配列は、いらなくなったと同時にErase したほうがいいんでしょうか。 配列を増やすほど実行速度が遅くなっていく気がします。 また、いっそのことVC++で書き直すと、実行速度は速くなる可能性はありますか。 VB.netのコードは、もちろん最適化のチェックをすべていれてあります。 どなたかご教授下さい。

みんなの回答

回答No.1

>配列を増やすほど実行速度が遅くなっていく気がします。 納得です。そうだと思います。 >また、いっそのことVC++で書き直すと、実行速度は速くなる可能性はありますか。 C#であれば、あまり速度的に変わらないと思います。 C++であれば、「領域確保」自体にはあまり差異はないと思いますが、.NET自体の重さを避ける事ができるので、他の部分や処理で高速化されると思います。 ただ個人的に、そんな大きな領域を確保する必要がることに疑問を感じたので、以下に書きます。 (ここからは、余談程度だと思ってください。) >コード内で動的配列を多用 >いらなくなったと同時にErase ということは、Public宣言で多くの動的配列を持っているということですか? 件数から想像すると、内部テーブルとして溜め込み、その後この変数内のデータに(もしくはデータから)処理を行っていませんか? そうであれば、データセット化して扱うと、領域確保だけを考えると高速化にはなりませんが、処理を簡潔にできるかもしれませんよ。 「動的配列を多用」という各変数を、それぞれデータテーブル化し、データセットとしてまとめると変数は一つで済みます。 以下の利点が生まれます。 ・データの複写が容易 ・データの検索・抽出ができる ・データのテキスト化も簡単(XML)なので、テキスト出力処理が一発で済む(だからデバッグもしやすい) いずれにせよ、その多用している動的変数の各扱いや、処理内容がわからないと、何が適しているかはわかりません。

hibachi
質問者

補足

回答ありがとうございます。 >いずれにせよ、その多用している動的変数の各扱い >や、処理内容がわからないと、何が適しているかは >わかりません。 私も質問した後これではわからないと思いました..(汗 やりたいことは、ファイルからバイナリリード -> 取得したByte配列の頭にヘッダを挿入 -> ヘッダごと配列を暗号化 -> 暗号化した配列にさらに頭にヘッダを挿入 とややわかりにくい事をしています。 つまり、配列の頭に要素を加えるごとに別の配列を作ってコピーをしているんです。 末尾に加えるなら簡単なのですが、アルゴリズムが思いつかなかったので非効率な事と思いながらこうしてしまいました。 知りたい事をまとめますと、  ・大きな配列を使用した場合、exeファイル実行に影響はあるのか。あるとすれば、即時にEraseで消すと影響は小さくなりますか。 と    ・配列の頭にさらに要素を加える場合、もう一つ配列を作らないでできるアルゴリズムはあるでしょうか? という事になります。 できるだけ高速化したいために質問いたしました。 長文失礼します。

関連するQ&A