この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.2.4 顧客一覧の取得
●配列データを返す4つの方法
以上,主な4つの方法について説明してきたわけだが,それぞれに一長一短があり,一概にどれが好ましいと断言することはできない。ここでは,いままで説明した4つの方法のパフォーマンスについて考えてみることにする。
パフォーマンスは主に,ネットワークを流れるデータ量とサーバー側のリソースの消費量で決まる。パフォーマンス面を見たとき,「1)のVariant型の配列を使う方法と3)のXML文字列を使う方法」,「2)のコレクションを使う方法と4)のADODB.Recordsetオブジェクトを使う方法」は,それぞれよく似ている。前者は,ただデータがクライアントに流れるのに対し,後者はサーバー側でCOMオブジェクトが実体化されて,そのオブジェクトの場所がクライアントに返される(Fig.6-46,Fig.6-47)。
Fig.6-46 データがそのまま流れるケース

Fig.6-47 サーバー側でCOMオブジェクトが実体化されるケース

Fig.6-46を見るとわかるように,コレクションのオブジェクト(Collectionオブジェクト)やADODB.Recordsetオブジェクトはサーバー側で実体化される。よって,サーバーのリソースを使うことになる。そのためクライアントは,コレクションやADODB.Recordsetオブジェクトを使い終えたならば,速やかにそのオブジェクトを指している変数にNothingを代入してオブジェクトを解放しなければならない。そうしないと,サーバーの負荷が大きくなる。
一方,Fig.6-47の方法では,オブジェクトが生成されるわけではなく,データそのものがそのままクライアントに流れるため,サーバー側のリソースは消費しない。よって,Fig.6-46よりも優れているように見える。しかし,流れるデータ量によっては,必ずしもそうとはいえない。というのは,Fig.6-47の方法では,返すデータ量が非常に大きな場合でも,そのデータ全体が一気にクライアントに流れるのに対し,Fig.6-46の場合には,クライアント側からデータの取得を求めてメソッドが呼ばれたときに,その都度データが流れるからである。たとえば,コレクションの場合にはItemプロパティをクライアントが参照したときにだけ,ADODB.Recordsetオブジェクトの場合にはFieldsコレクションを参照したときにだけ,保持しているデータがそれぞれ流れるのである(Fig.6-48)。
Fig.6-48 クライアントによって要求されたデータのみが流れる

全データをクライアントが一括して必要とするのであれば,Fig.6-47のほうが効率がよい。しかし,クライアントが全データのうち一部のデータのみを取り出して利用する場合には,全データのうちクライアントが欲するデータしか流れないFig.6-46のほうが効率がよいということになる。
以上のことから,Fig.6-46の方法とFig.6-47の方法では,一概にどれが優れていると断言することはできない。クライアント側が全データを必要とするのか,戻り値のうち一部のデータしか利用しないのかによって,どちらが適しているのかは異なるのである。
| Chapter 6 31/92 |
