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次元配列
VBでAPIを使おう第2回:配列変数をコピーする
http://www6.ocn.ne.jp/~mzworks/vb/vb_club_api_002.htm
あ、2次元配列か・・・・、どうなるんやろ。
やじゅさん早急な回答ありがとうございます。
上記のサイトを参考に作成してみたのですが、①と②とで同じ結果が得られませんでした。
どこがまちがっているのでしょうか?
①
For i = 0 To Max
Array1(i) = Array2(i, 1)
Next
②
Call CopyMemory(Array1(0), Array2(Max, 1), LenB(Array1(0)))
メモリ管理の関係で一括コピーはちょっと思いつきません。
私はやじゅさんが提示してくれたHPから、CopyMemoryの毎回の
ループが早いと思います。
#そこまで速度を追求するならVBを使わない手もあるかと
# とりあえず、http://ja.wikipedia.org/wiki/%E4%B8%B8%E6%95%B0%E5%AD%97
# もチェックしておいてみるとか。
で、なぜByValを付けるのでしょうか?
また、CopyMemoryが有効なのは、内容が数値型である(というよりは可変長文字列や可変長配列、オブジェクト型を含まない)場合だけですが、その点は大丈夫
なのでしょうか?
なお、Native-Code-Compileならば、普通に順次代入をしていっても、
最速とまでは言えませんが十分な速度が期待できるとは思います。
むしろ、速度を気にしたいのであれば、無駄な操作が必要ないような仕組みに
すべきでしょう。例えばこのデータの複製は必要なのでしょうか? また、2次元
で配列を保持する必要はあるのでしょうか? その辺りでも注意をしてみるべきかと。
ツイート | ![]() |