描画速度を向上させる方法(2)
対象製品
SPREAD for .NET Windows Forms Edition
詳細
表示速度の高速化の手段としては、スプレッドのモデルクラスを使用する方法があります。
例えばセルにデータを設定する場合は、Cells(row, Col).Value またはCells(row, Col).Text または、SheetのSetText、SetValueメソッドを使用するよりも、データモデルを使用したほうが処理が高速になります。
同様に、セルの罫線やセル型などの設定を行う場合も、セルのCellTypeプロパティやBorderプロパティを設定するよりも、スタイルモデルを使用したほうが高速になります。また、大量のセルにスタイルを設定する場合は、名前付きスタイルオブジェクトを使用することで、リソースの消費も最小限に抑え、更に高速な処理を行うことができます。
例えば、日付時刻型セル、罫線、現在日付時刻をセルに設定する場合、次のような結果となります。
下記サンプルコードでは、Button1でセルに直接設定し、Button2ではスプレッドのモデルクラスを使用しています。また、スプレッドのモデルクラスには、下記で使用したデータモデル、スタイルモデルのほか、セルの連結を管理するスパンモデル等があります。詳しくは製品ヘルプをご参照下さい。
◎サンプルコード
例えばセルにデータを設定する場合は、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秒
【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
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