描画速度を向上させる方法(2)

文書番号 : 14879     文書種別 : 使用方法     最終更新日 : 2004/07/16
文書を印刷する
対象製品
SPREAD for .NET Windows Forms Edition
詳細
表示速度の高速化の手段としては、スプレッドのモデルクラスを使用する方法があります。

例えばセルにデータを設定する場合は、Cells(row, Col).Value またはCells(row, Col).Text または、SheetのSetText、SetValueメソッドを使用するよりも、データモデルを使用したほうが処理が高速になります。

同様に、セルの罫線やセル型などの設定を行う場合も、セルのCellTypeプロパティやBorderプロパティを設定するよりも、スタイルモデルを使用したほうが高速になります。また、大量のセルにスタイルを設定する場合は、名前付きスタイルオブジェクトを使用することで、リソースの消費も最小限に抑え、更に高速な処理を行うことができます。

例えば、日付時刻型セル、罫線、現在日付時刻をセルに設定する場合、次のような結果となります。
【セルの数】500列×500行
【PCスペック】CPU:Pentium4 2.4GHz メモリ:512MB
------------------------------------------------------- 
◎セルに直接設定した場合:47.867876
◎スタイルモデルおよびデータモデルを使用した場合:5.647896

下記サンプルコードでは、Button1でセルに直接設定し、Button2ではスプレッドのモデルクラスを使用しています。また、スプレッドのモデルクラスには、下記で使用したデータモデル、スタイルモデルのほか、セルの連結を管理するスパンモデル等があります。詳しくは製品ヘルプをご参照下さい。

◎サンプルコード
Imports FarPoint.Win
Imports FarPoint.Win.Spread
Imports FarPoint.Win.Spread.Model
Imports FarPoint.Win.Spread.CellType


  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '名前付きスタイルオブジェクトを作成し、セル型/罫線を設定する
    Dim ns As New NamedStyle("MyStyle")
    ns.CellType = New DateTimeCellType
    ns.Border = New ComplexBorder(New ComplexBorderSide(ComplexBorderSideStyle.Dashed))
    'スプレッドのコレクションに登録する
    FpSpread1.NamedStyles.Add(ns)
  End Sub

  '=====================================
  ' セルに直接設定する場合
  '=====================================

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim i As Integer
    Dim j As Integer
    Dim t As DateTime = Now

    FpSpread1.SuspendLayout()

    'ループ処理で全てのセルにセル型、罫線、値を設定する。
    With FpSpread1.ActiveSheet
      For i = 0 To 499
        For j = 0 To 499
          .Cells(i, j).CellType = New DateTimeCellType
          .Cells(i, j).Border = New ComplexBorder(New ComplexBorderSide(ComplexBorderSideStyle.Dashed))
          .Cells(i, j).Value = Now
        Next
      Next
    End With

    FpSpread1.ResumeLayout(True)

    Debug.WriteLine(Now.Subtract(t).TotalSeconds.ToString)

  End Sub

  '=====================================
  ' モデルクラスを使用する場合
  '=====================================

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim i, j As Integer
    Dim t As DateTime = Now

    'データモデルを取得する
    Dim datamodel As DefaultSheetDataModel = CType(FpSpread1.ActiveSheet.Models.Data, DefaultSheetDataModel)
    'スタイルモデルを取得する
    Dim stylemodel As DefaultSheetStyleModel = CType(FpSpread1.ActiveSheet.Models.Style, DefaultSheetStyleModel)

    FpSpread1.SuspendLayout()

    'コレクションから名前付きスタイルオブジェクトを取得する
    Dim style As StyleInfo = FpSpread1.NamedStyles.Find("MyStyle")

    'ループ処理で全てのセルにスタイルと値を設定する
    For i = 0 To 499
      For j = 0 To 499
        stylemodel.SetDirectInfo(i, j, style)
        datamodel.SetValue(i, j, Now)
      Next
    Next

    FpSpread1.ResumeLayout(True)

    Debug.WriteLine(Now.Subtract(t).TotalSeconds.ToString)
  End Sub

  '=====================================
  ' スプレッドシートをリセットする
  '=====================================

  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    FpSpread1.ActiveSheet.Reset()
  End Sub
関連情報
キーワード
機能・仕様 HowTo 一般 外観

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