MESCIUS SPREAD for ASP.NET 10.0J
Data モデル

Data モデルは、セル内の値や数式、またはセルノートや セルタグといったセル内の情報を保持します。 これには、シートのデータ領域セルの Value プロパティ値、データ連結されたシートのデータソース関連プロパティ、その他、セルの内容に関連するすべてが含まれます。また、データソースに連結していない場合(非連結モード)と連結する場合(連結モード)のどちらでも使用できます。

Data モデルを形成するクラスは以下のとおりです。

基本クラス BaseSheetDataModel クラス
デフォルトクラス DefaultSheetDataModel クラス
インタフェース ISheetDataModel インタフェース

また、Data モデルは、SheetView クラスの以下のプロパティから参照されます。

メモリ使用量と処理速度

Data モデルは、セルノート、数式、セルタグ、および値を保持するオブジェクトを作成します。これらのオブジェクトは、モデルの大きさ、およびモデル内のデータの情報量に応じて、速度とメモリ使用量のバランスを調整するように設計されています。セルノート、数式、およびタグを使用していない場合は、データの情報量が少ないため、メモリ使用量は少なくなります。これらのオブジェクトは、データが実際に必要となるまではデータにメモリを割り当てません。したがって、モデルにセルノート、数式、またはセルタグが設定されていない場合は、メモリ使用量は低いままで維持されます。

また、DefaultSheetDataModel クラスの GetValue メソッドおよびSetValue メソッドを使用してデータを保管する場合は、アクセス速度とメモリ使用量とのバランスが調整されます。これは、大きなデータ数(たとえば 20 億行×20 億列のモデルなど)を高速に作成するための仕様です。

処理する値の数がメモリ不足を引き起こすほどには多くない場合、このモデルに対する値の設定と取得では、適切な処理速度が維持されます。データ数がきわめて大きく、データの情報量がきわめて少ない場合(2/3 以上が空白)は、アクセス速度は低下しますが、メモリ使用量も低くなります。

データ数が大きすぎず(行と列の数が 32,000 未満)、情報量もそれほど少なくない場合は(1/3 以上にデータが存在)、アクセス速度は高まり、メモリ使用量も多くなります。つまり、きわめて大量のデータを SPREADコントロールに設定すると、ビューステートが巨大になります。このような遅延を軽減するには、SaveViewState プロパティを無効にし、ページがロードされるたびにデータをロードします。

行、列の追加とセルの値

DefaultSheetDataModel クラスには、行や列を追加、または削除するメソッドが用意されています。

モデルに列や行を追加すると、これらの列や行はシートにも追加されます。

また、GetValue メソッド やSetValue メソッド により取得または設定されるセルの値は、シート内の行および列と同じインデックスを持ちます。ソート により並べ替えられた行や列は、コントロール上での表示に対して実行され、実際のData モデルを並び替えるわけではありません。ソートを実行した場合は、SheetView クラスGetModelRowFromViewRow および GetModelColumnFromViewColumn メソッドを使用して、Data モデルでの位置を取得できます。

データ連結

データソースに連結していない非連結モードでは、データモデルはセル値の2次元配列とほぼ同様に機能します。連結モードでは、Data モデルはデータソースからは得られない追加機能(セルの数式、非連結の行および列など)を提供します。

IDataSourceSupport インタフェースのメンバを実装し、Data モデルをデータソースに連結すると、Data モデルは直接データソースのデータに対して取得および設定を行います。

このとき、AddColumns メソッドによって列がデータモデルに追加された場合は、追加された列の中に非連結列が含まれる可能性もあります。この場合、非連結列の値は、データソース内ではなくData モデル内に保管されます。これらの行を連結行にするには、IUnboundRowSupport インタフェースAddRowToDataSource メソッドを実行します。(ただし、データソース側でこの動作が許可されている場合にかぎります。)

データ連結時のパフォーマンス

以下の2つのコードは、いずれもMyDataという名前のデータソースを連結します。最初のコードは、シートのDataSource プロパティに連結し、次のコードはData モデルに連結しています。

FpSpread1.Sheets[0].DataSource = MyData.Tables("table1");
FpSpread1.Sheets(0).DataSource = MyData.Tables("table1")        
FarPoint.Web.Spread.Model.DefaultSheetDataModel model = new FarPoint.Web.Spread.Model.DefaultSheetDataModel(MyData, "table1");
FpSpread1.Sheets(0).DataModel = model   
Dim model As FarPoint.Web.Spread.Model.DefaultSheetDataModel = New FarPoint.Web.Spread.Model.DefaultSheetDataModel(MyData, "table1")
FpSpread1.Sheets(0).DataModel = model       

最初のコードでは、既存のData モデルを使用して、データソースに合わせてサイズ変更しています。2番目のコードでは、Data モデルを新規モデルに置き換え、古いモデルを破棄しています。どちらのコードも同じ結果となりますが、2番目のコードでは、古いデータモデルがガベージコレクトされます。一般的には、独自のデータモデルクラスを作成する場合を除き、データモデルを置換する必要はありません。Data モデルを新たに置き換えなくても、通常は既存のデータモデルで十分な処理を行えます。

関連トピック

 

 


© MESCIUS inc. All rights reserved.