フィルタを有効にしコールバック処理でSPREADを操作すると、クライアント側のIEのメモリ使用量が増大する
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
フィルタを有効にしコールバック処理でSPREADを操作すると、クライアント側のIEのメモリ使用量が増大します。
【再現コード】
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' データの作成
Dim dt As New Data.DataTable("TEST")
For i As Integer = 0 To 99
dt.Columns.Add(String.Format("列{0:00}", i), GetType(String))
Next
For i As Integer = 0 To 999
Dim dr As Data.DataRow = dt.NewRow()
For j As Integer = 0 To 99
dr(j) = String.Format("R{0}C{1}", i, j)
Next
dt.Rows.Add(dr)
Next
dt.AcceptChanges()
' SPREADの設定
FpSpread1.ActiveSheetView.ColumnCount = 101
FpSpread1.ActiveSheetView.Columns(0).CellType = New FarPoint.Web.Spread.CheckBoxCellType()
For i As Integer = 1 To FpSpread1.ActiveSheetView.ColumnCount - 1
FpSpread1.ActiveSheetView.Columns(i).DataField = dt.Columns(i - 1).ColumnName
Next
FpSpread1.ActiveSheetView.AutoGenerateColumns = False
FpSpread1.ActiveSheetView.DataAutoCellTypes = False
FpSpread1.ActiveSheetView.DataSource = dt
FpSpread1.ActiveSheetView.PageSize = 50
FpSpread1.ActiveSheetView.AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.FilterBar
' チェックボックスの設定
CheckBox1.AutoPostBack = True
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
' チェックボックス型セルの値設定
Dim check As Boolean = CheckBox1.Checked
For i As Integer = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, check)
Next
End Sub
【再現手順】
1.新規WebフォームにScriptManagerとUpdatePanelを配置します
2.UpdatePanel内にCheckBoxとSPREADコントロールを配置します
3.サンプルコードを貼り付けプロジェクトを実行します
4.CheckBoxをチェックします
-- SPREADの1列目がチェックされます
5.CheckBoxのチェックを外します
-- SPREADの1列目のチェックが外れます
6.手順4~5を4回繰り返します
Internet Explorer 8でのメモリ使用量の推移
・フィルタあり
表示時 : 51M
1回目 : 81M
2回目 :103M
3回目 :124M
4回目 :136M
・フィルタなし
表示時 : 40M
1回目 : 53M
2回目 : 60M
3回目 : 66M
4回目 : 70M
【再現コード】
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' データの作成
Dim dt As New Data.DataTable("TEST")
For i As Integer = 0 To 99
dt.Columns.Add(String.Format("列{0:00}", i), GetType(String))
Next
For i As Integer = 0 To 999
Dim dr As Data.DataRow = dt.NewRow()
For j As Integer = 0 To 99
dr(j) = String.Format("R{0}C{1}", i, j)
Next
dt.Rows.Add(dr)
Next
dt.AcceptChanges()
' SPREADの設定
FpSpread1.ActiveSheetView.ColumnCount = 101
FpSpread1.ActiveSheetView.Columns(0).CellType = New FarPoint.Web.Spread.CheckBoxCellType()
For i As Integer = 1 To FpSpread1.ActiveSheetView.ColumnCount - 1
FpSpread1.ActiveSheetView.Columns(i).DataField = dt.Columns(i - 1).ColumnName
Next
FpSpread1.ActiveSheetView.AutoGenerateColumns = False
FpSpread1.ActiveSheetView.DataAutoCellTypes = False
FpSpread1.ActiveSheetView.DataSource = dt
FpSpread1.ActiveSheetView.PageSize = 50
FpSpread1.ActiveSheetView.AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.FilterBar
' チェックボックスの設定
CheckBox1.AutoPostBack = True
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
' チェックボックス型セルの値設定
Dim check As Boolean = CheckBox1.Checked
For i As Integer = 0 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, check)
Next
End Sub
【再現手順】
1.新規WebフォームにScriptManagerとUpdatePanelを配置します
2.UpdatePanel内にCheckBoxとSPREADコントロールを配置します
3.サンプルコードを貼り付けプロジェクトを実行します
4.CheckBoxをチェックします
-- SPREADの1列目がチェックされます
5.CheckBoxのチェックを外します
-- SPREADの1列目のチェックが外れます
6.手順4~5を4回繰り返します
Internet Explorer 8でのメモリ使用量の推移
・フィルタあり
表示時 : 51M
1回目 : 81M
2回目 :103M
3回目 :124M
4回目 :136M
・フィルタなし
表示時 : 40M
1回目 : 53M
2回目 : 60M
3回目 : 66M
4回目 : 70M
回避方法
Service Pack 1(v8.0.4001.2010)で修正済み。なお、フィルタ用のhtmlオブジェクトが出力される制約上、本不具合を修正したService Pack 1(v8.0.4001.2010)でも一定レベルでのメモリ上昇は避けられません。この動作は製品の制限事項となります。
Service Pack 1(IE8)でのメモリ使用量の推移
・フィルタあり
表示時 :48M
1回目 :77M
2回目 :82M
3回目 :87M
3回目 :91M
Service Pack 1(v8.0.4001.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
UpdatePanelを使用せずにポストバックでシートの値を変更します。
Service Pack 1(IE8)でのメモリ使用量の推移
・フィルタあり
表示時 :48M
1回目 :77M
2回目 :82M
3回目 :87M
3回目 :91M
Service Pack 1(v8.0.4001.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
UpdatePanelを使用せずにポストバックでシートの値を変更します。