レスポンスを改善する方法はありませんか?

文書番号 : 21786     文書種別 : 使用方法     最終更新日 : 2009/01/19
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
アプリケーションの性能に関する注意点および改善の手法を5点ご紹介します。

■注意点

一般的にWebアプリケーションの性能を改善するには、大量のデータを一度に表示することを回避する工夫が必要です。最終的にHTMLソースを生成しクライアントに応答するため、データ量が多くなりますと、ページサイズが増大します。応答データの送受信に費やす時間、Webページの描画に費やす時間が増えることでアプリケーションの性能に影響を与えてしまうためです。

大量のデータを扱う場合は、製品のページング機能をご利用いただき、データを複数のページに分けて表示する方法をご検討ください。PageSizeプロパティにてページ当たりに表示する行数を設定することができます。

■手法1(SPREADの状態管理にViewStateを使用しない)

製品ではデフォルトの設定でSPREADの状態管理(表示するデータや書式などの情報)にViewStateを使用します。ViewStateの内容はページのHiddenフィールドに出力されますので、表示するデータが多い場合、ページサイズが増大しレスポンスを遅くしてしまいます。

製品ではこの動作を回避していただくためにViewStateの内容をセッション変数に出力する方法を提供しています。この方法を使用することで、ページサイズを削減できレスポンスを改善できる可能性があります。

詳しくは製品ヘルプの「開発者の手引き」>「状態の管理」をご覧ください。

■手法2(スタイル設定にCssClassを使用する)

コントロールのRenderCssClassプロパティをTrueに設定すると、コントロールはCSSスタイルを使用します。この場合、コントロールはスタイル関連の設定を含むCSSClassを生成し使用しますので、全てのセルで個別にスタイル関連のHTMLが出力されることを回避できます。CssClassを有効に活用することで出力されるHTMLの量を抑えることができ、レスポンスの向上が期待できます。

 FpSpread1.RenderCSSClass = True


下記生成されるHTMLです。

[RenderCSSClass を False に設定(デフォルト)]
  <td valign="Top" style="padding-right:3;padding-left:3;"> </td>

[RenderCSSClass を True に設定]
(スタイル関連の設定は"FpSpread1css1"として一箇所で定義されます)
  <td class="FpSpread1css1"> </td>


また、アプリケーション側で宣言したCssClassを使用したい場合、各セル型で提供されるCssClassプロパティを使用する方法があります。下記、例です。ここでは"myCell"クラスを宣言し設定しています。

------------------------------------------
Web フォーム
------------------------------------------
<HTML>
<HEAD>
   :
 <STYLE type="text/css">
  .myCell { BACKGROUND-COLOR: red ;FONT-STYLE:italic}
 </STYLE>
</HEAD>
   :



-------------------------------------------
Web フォームクラス
-------------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' ページを初期化するユーザー コードをここに挿入します。
    If (IsPostBack = True) Then
      Return
    End If

    Dim gc As New GeneralCellType
    gc.CssClass = "myCell"
    FpSpread1.RenderCSSClass = True
    FpSpread1.Sheets(0).Columns(0).CellType = gc

    'スタイルプロパティを利用する場合
    'Dim myStyleInfo As StyleInfo = New StyleInfo
    'myStyleInfo.CellType = New GeneralCellType
    'myStyleInfo.BackColor = Color.Red
    'myStyleInfo.ForeColor = Color.Blue
    'myStyleInfo.Font.Italic = True
    'FpSpread1.Sheets(0).SetStyleInfo(-1, 0, myStyleInfo)
           :



下記、出力されるHTMLです。

[スタイルプロパティを利用し場合]
<td valign="Top" bgColor="Red" ... style="color:Blue;font-style:italic;padding-right:3;padding-left:3;">

[CSSクラスを利用した場合]
<td class="myCell" ... style="padding-right:3;padding-left:3;">

●参考●
SPREADはセルのパディングを3pxに設定するためstyle属性を出力します。これは次の様にDefaultStyle.ParentにNothingを設定することで出力させないようにできます。

 FpSpread1.Sheets(0).DefaultStyle.Parent = Nothing

出力されるHTMLは次の様になります。

[CSSクラスを利用/DefaultStyle.ParentをNothingにした場合]
<td class="myCell" ... >
 ※style="padding-right..."が出力されません。


■手法3(Cell.TextプロパティのかわりにCell.Valueプロパティを使用する)

次のようにセルの Text プロパティを通じてデータを設定している場合、かわりにValueプロパティを使用することで性能を改善できる可能性があります。

spr.Sheets(1).Cells(row, col).Text = data

セルに Textプロパティを使用してデータを設定した場合、コントロールはデータを解析しセルに書式を設定します。そのためコントロールに設定するデータ件数が多い場合にTextプロパティを使用すると、セル数分のデータ解析処理が負荷を生じ、アプリケーション性能に影響を及ぼす可能性があります。

データ件数が多い場合にはTextプロパティではなく、Valueプロパティを使用してください。

■手法4(1度に表示する件数を減らす)

PageSize プロパティにて、1ページに表示するデータの件数を設定することができます。

FpSpread1.Sheets(0).PageSize = 10

また、ロードオンデマンドの機能を利用することで、初期表示時に表示するデータの件数を制御し、残りのデータをシートのスクロールに応じて取得するということが可能です。詳しくは製品ヘルプの「開発者の手引き」>「ユーザーの操作方法をカスタマイズ」>「コントロール全体に対するユーザー操作のカスタマイズ」>「ロードオンデマンドを許可する」をご覧ください。

■手法5(ClientAutoCalculation プロパティをFalseに設定する)

ClientAutoCalculation プロパティをTrue(デフォルト値はFalse)に設定すると、セルの値が変更されるたびにコールバックされ、セルの移動に時間がかかる場合があります。

 FpSpread1.ClientAutoCalculation = True

ClientAutoCalculation プロパティをTrueに設定していてセル移動のレスポンスを改善したい場合は、ClientAutoCalculation プロパティをFalseに設定してください。
ただ、ClientAutoCalculation プロパティをFalseに設定した場合は、セルの値が編集されたタイミングで自動的に数式の結果が更新されません。数式の結果を更新するには、ポストバック時にSaveChangesメソッドを実行して、クライアント側の変更を確定する必要があります。

 FpSpread1.SaveChanges()
関連情報
キーワード
一般

この文書は、以前は次のFAQ IDで公開されていました : 9110