投稿日 | : 2003/03/28(Fri) 13:09 |
投稿者 | : よねKEN |
Eメール | : |
URL | : http://www5b.biglobe.ne.jp/~yone-ken/ |
タイトル | : Re: クラスは遅い? |
> ファイルを読み込んで、変数に格納するプロシージャがあるのですが、
> 変数があまりにも多く、以外と時間もかかるため、変数の定義方法を変えて
> 高速格納化を目指してます。
その部分のコードを提示して下さい。
また、どんなデータを読み込んで、どんなマシン環境で、
どの程度の時間がかかっているのでしょうか?
> 今MDI環境で作成してますが、変数は全てクラスで定義していて、2次元
> および3次元の配列はクラスではうまく表現できないため、それらの配列変数は
> コレクションを用いてます。
クラス内部で保持するデータ構造と、外部からそれにアクセスするインタフェースとは
まったく別なので、内部のデータ構造にコレクションを用いるか、配列を用いるか?は、
クラスを利用する側のプログラムには関係ありません。
#というか利用する側になるべく影響がでないようにクラスを設計しないといけません。
Private 内部_3次元配列(100,100,100) As ほげほげ
Public Property Get 外部_3次元配列(ByVal x As Long, ByVal y As Long, ByVal z As Long) As ほげほげ
外部_3次元配列 = 内部_3次元配列(x,y,z)
End Property
Public Property Let 外部_3次元配列(ByVal x As Long, ByVal y As Long, ByVal z As Long, ByVal value As ほげほげ)
内部_3次元配列(x,y,z) = value
End Property
のようにすれば普通に3次元配列を使えますが、こういうことではないのでしょうか?
> 昔、SDIで作成したときは、対象のプロシージャを含むモジュールの先頭部分で
> Public変数(表現は悪いですが、クラスを用いずという意味)として定義してました。
どういうやり方のことを指しているのかよくわかりません。
> (質問1)
> 遅くなった原因ですが、これはクラスを用いているせいでしょうか。それとも
> MDIだからでしょうか。それともコレクションを使ったせいでしょうか。
> 分かるようでしたら、是非教えてください。
クラスの作り方、使い方に問題がありそうな気もしますが、
配列を使うべきところでコレクションを使っているのであれば、
遅くなっているのはおそらくコレクションにデータを設定しているところでしょう。
コレクションは便利ですが、あまり大量データを扱うのには向いていません。
コレクションは配列に比べてデータの設定が極めて遅いので、
データ量が多くなると使い物にならなくなります。
大量データを高速に扱う必要がある場合は、配列を使うべきです。
後、クラスからインスタンスを生成するのも非常に時間のかかる処理です。
無駄なインスタンスの生成を控えるようにした方がいいでしょう。
> 以上のような事から「クラス(MDI)」→「Public変数(MDI)」に変更しようか
> どうか非常に迷ってます。せっかく、MDIにするためにクラスを導入したのに、
クラスとPublic変数は比較対照となるようなものではありません。
クラスはデータ型ですし、Publicは変数のスコープで、まったく別のものです。
根本の部分で、クラスとは何か?どう作ってどう使うべきか?を
誤解されているように思えます。
オブジェクト指向とは?というあたりからの勉強をお勧めします。