この特集のトップページへ
Chapter 6:ビジネスロジックの設計

6.2.4 顧客一覧の取得
●配列データを返す4つの方法

○配列を渡す方法のパフォーマンスの考察
 以上,主な4つの方法について説明してきたわけだが,それぞれに一長一短があり,一概にどれが好ましいと断言することはできない。ここでは,いままで説明した4つの方法のパフォーマンスについて考えてみることにする。

 パフォーマンスは主に,ネットワークを流れるデータ量とサーバー側のリソースの消費量で決まる。パフォーマンス面を見たとき,「1)のVariant型の配列を使う方法と3)のXML文字列を使う方法」,「2)のコレクションを使う方法と4)のADODB.Recordsetオブジェクトを使う方法」は,それぞれよく似ている。前者は,ただデータがクライアントに流れるのに対し,後者はサーバー側でCOMオブジェクトが実体化されて,そのオブジェクトの場所がクライアントに返される(Fig.6-46Fig.6-47)。

Fig.6-46 データがそのまま流れるケース
fig6_46

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

 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 クライアントによって要求されたデータのみが流れる
fig6_48

 全データをクライアントが一括して必要とするのであれば,Fig.6-47のほうが効率がよい。しかし,クライアントが全データのうち一部のデータのみを取り出して利用する場合には,全データのうちクライアントが欲するデータしか流れないFig.6-46のほうが効率がよいということになる。

 以上のことから,Fig.6-46の方法とFig.6-47の方法では,一概にどれが優れていると断言することはできない。クライアント側が全データを必要とするのか,戻り値のうち一部のデータしか利用しないのかによって,どちらが適しているのかは異なるのである。

prevpg.gif Chapter 6 31/92 nextpg.gif