2次元配列のコピーについて


ペン  2008-03-12 19:57:18  No: 139252  IP: 192.*.*.*

VB6.0を使用しております。

表題のように2次元配列をコピー処理について質問があります。
普通、2次元配列を別の1次元配列にコピーする際には for 文を使うかと思いますが、パフォーマンスをよくしたいです。
API関数の CopyMemory を使えばよいみたいなこと見つけたのですが、使用方法がよくわかりません。
ご教授お願いします。


Redim Array1(1000)
Call CopyMemory(ByVal Array1(0), ByVal Array2(0, 0), LenB(Array2))  ??

 Array1 1次元配列
 Array2 2次元配列

編集 削除
やじゅ  2008-03-12 20:13:46  No: 139253  IP: 192.*.*.*

VBでAPIを使おう第2回:配列変数をコピーする
http://www6.ocn.ne.jp/~mzworks/vb/vb_club_api_002.htm

編集 削除
やじゅ  2008-03-12 20:18:29  No: 139254  IP: 192.*.*.*

あ、2次元配列か・・・・、どうなるんやろ。

編集 削除
ペン  2008-03-12 20:21:54  No: 139255  IP: 192.*.*.*

やじゅさん早急な回答ありがとうございます。
上記のサイトを参考に作成してみたのですが、①と②とで同じ結果が得られませんでした。
どこがまちがっているのでしょうか?


For i = 0 To Max
     Array1(i) = Array2(i, 1)
Next


Call CopyMemory(Array1(0), Array2(Max, 1), LenB(Array1(0)))

編集 削除
 2008-03-12 22:50:53  No: 139256  IP: 192.*.*.*

メモリ管理の関係で一括コピーはちょっと思いつきません。

私はやじゅさんが提示してくれたHPから、CopyMemoryの毎回の
ループが早いと思います。

#そこまで速度を追求するならVBを使わない手もあるかと

編集 削除
K.J.K.  2008-03-13 15:25:38  No: 139257  IP: 192.*.*.*

# とりあえず、http://ja.wikipedia.org/wiki/%E4%B8%B8%E6%95%B0%E5%AD%97
# もチェックしておいてみるとか。

で、なぜByValを付けるのでしょうか?
また、CopyMemoryが有効なのは、内容が数値型である(というよりは可変長文字列や可変長配列、オブジェクト型を含まない)場合だけですが、その点は大丈夫
なのでしょうか?

なお、Native-Code-Compileならば、普通に順次代入をしていっても、
最速とまでは言えませんが十分な速度が期待できるとは思います。

むしろ、速度を気にしたいのであれば、無駄な操作が必要ないような仕組みに
すべきでしょう。例えばこのデータの複製は必要なのでしょうか? また、2次元
で配列を保持する必要はあるのでしょうか? その辺りでも注意をしてみるべきかと。

編集 削除