【階層】 階層表示で子階層の展開と折りたたみを繰り返すとクライアント側のIEのメモリ使用量が増大する

文書番号 : 38184     文書種別 : 制限事項     登録日 : 2015/02/27     最終更新日 : 2015/03/31
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
詳細
階層表示で子階層の展開と折りたたみを繰り返すとクライアント側のIEのメモリ使用量が増大します。

【再現コード】
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsPostBack Then Return

    ' 階層用データ
    Dim myDataSet As New Data.DataSet()
    Dim thisyear As System.Data.DataTable, lastyear As System.Data.DataTable

    thisyear = myDataSet.Tables.Add("thisyear")
    thisyear.Columns.AddRange(New Data.DataColumn() {New Data.DataColumn("製品ID", Type.GetType("System.String")), New Data.DataColumn("製品種別", Type.GetType("System.String")), New Data.DataColumn("製品名", Type.GetType("System.String")), New Data.DataColumn("当年第1Q", Type.GetType("System.Int32")), New Data.DataColumn("当年第2Q", Type.GetType("System.Int32")), New Data.DataColumn("当年第3Q", Type.GetType("System.Int32")), New Data.DataColumn("当年第4Q", Type.GetType("System.Int32"))})

    thisyear.Rows.Add(New [Object]() {"10001", "乳製品", "酪農ミルク", 5500, 5000, 4500, 6000})
    thisyear.Rows.Add(New [Object]() {"20001", "清涼飲料水", "いよかんドリンク", 1000, 3000, 2700, 2700})
    thisyear.Rows.Add(New [Object]() {"20002", "清涼飲料水", "ぶどうジュース", 3000, 3500, 4800, 4800})
    thisyear.Rows.Add(New [Object]() {"20003", "清涼飲料水", "マンゴードリンク", 2000, 1000, 500, 1050})
    thisyear.Rows.Add(New [Object]() {"30001", "ビール", "激辛ビール", 5500, 8000, 8500, 10000})
    thisyear.Rows.Add(New [Object]() {"30002", "ビール", "モルトビール", 3000, 3500, 2780, 4000})
    thisyear.Rows.Add(New [Object]() {"20004", "清涼飲料水", "ぶどうの街", 500, 300, 200, 700})
    thisyear.Rows.Add(New [Object]() {"30003", "ビール", "オリエントの村", 8000, 9500, 9580, 9000})
    thisyear.Rows.Add(New [Object]() {"40002", "焼酎", "吟醸 ほめごろし", 6000, 7000, 9000, 9500})
    thisyear.Rows.Add(New [Object]() {"40003", "焼酎", "大吟醸 オリエント", 1000, 5000, 6000, 5000})
    thisyear.Rows.Add(New [Object]() {"40005", "焼酎", "麦焼酎 ちこちこ", 1000, 1500, 1200, 1258})
    thisyear.Rows.Add(New [Object]() {"10002", "乳製品", "酪農ミルク(低脂肪)", 501, 202, 380, 456})

    lastyear = myDataSet.Tables.Add("lastyear")
    lastyear.Columns.AddRange(New Data.DataColumn() {New Data.DataColumn("製品ID", Type.GetType("System.String")), New Data.DataColumn("製品種別", Type.GetType("System.String")), New Data.DataColumn("製品名", Type.GetType("System.String")), New Data.DataColumn("前年第1Q", Type.GetType("System.Int32")), New Data.DataColumn("前年第2Q", Type.GetType("System.Int32")), New Data.DataColumn("前年第3Q", Type.GetType("System.Int32")), New Data.DataColumn("前年第4Q", Type.GetType("System.Int32"))})

    lastyear.Rows.Add(New [Object]() {"10001", "乳製品", "酪農ミルク", 2000, 1000, 4023, 5230})
    lastyear.Rows.Add(New [Object]() {"20001", "清涼飲料水", "いよかんドリンク", 1050, 2000, 2500, 2600})
    lastyear.Rows.Add(New [Object]() {"20002", "清涼飲料水", "ぶどうジュース", 3600, 2400, 1200, 1600})
    lastyear.Rows.Add(New [Object]() {"20003", "清涼飲料水", "マンゴードリンク", 1600, 1250, 356, 1020})
    lastyear.Rows.Add(New [Object]() {"30001", "ビール", "激辛ビール", 5600, 5000, 2500, 1900})
    lastyear.Rows.Add(New [Object]() {"30002", "ビール", "モルトビール", 1000, 2500, 2760, 2000})
    lastyear.Rows.Add(New [Object]() {"20004", "清涼飲料水", "ぶどうの街", 500, 300, 200, 700})
    lastyear.Rows.Add(New [Object]() {"30003", "ビール", "オリエントの村", 1000, 500, 2580, 1230})
    lastyear.Rows.Add(New [Object]() {"40002", "焼酎", "吟醸 ほめごろし", 5000, 7589, 5000, 6895})
    lastyear.Rows.Add(New [Object]() {"40003", "焼酎", "大吟醸 オリエント", 800, 3568, 4521, 3564})
    lastyear.Rows.Add(New [Object]() {"40005", "焼酎", "麦焼酎 ちこちこ", 1000, 1512, 1212, 1058})
    lastyear.Rows.Add(New [Object]() {"10002", "乳製品", "酪農ミルク(低脂肪)", 301, 102, 280, 256})

    ' リレーションシップを設定します。
    myDataSet.Relations.Add("prddata", thisyear.Columns("製品ID"), lastyear.Columns("製品ID"))

    FpSpread1.DataSource = myDataSet
    FpSpread1.ActiveSheetView.PageSize = FpSpread1.ActiveSheetView.RowCount
  End Sub

【再現手順】
1.プロジェクトを起動します
2.1行目から12行目の子階層を順に展開する
3.展開済みの12行目から1行目の子階層を順に折りたたむ
4.手順2~3を2回繰り返す

Internet Explorer 11での結果
初期表示          : 36.4 M
全てを展開後折りたたみ1回目 : 91.5 M
全てを展開後折りたたみ2回目 :118.8 M
回避方法
Service Pack 3(v7.0.4017.2010)ではIE7/8/9のメモリ使用量の削減を行っておりますが、SP3でもサポートするすべてのブラウザにおいて現象は発生します。

現象を回避するにはコールバックではなくポストバックによって階層の展開と折りたたみを行います。

------------------------------------
Webフォームクラス
------------------------------------
FpSpread1.EnableAjaxCall = False