1

動的データによって生成された非常に複雑なドキュメントがあります。最近、IE8 を使用しているユーザーから「メモリ不足」の問題が発生しました。ただし、この例では、すべてのバージョンの IE にメモリの問題があるようです。ポストバック (部分的または完全) があると、ポストバックごとに IE のメモリ使用量が 2 ~ 50 MB 増加します。十分な使用量があれば、単純なページの使用量が 1 GB を簡単に超えてしまいます (Chrome のメモリは約 30 MB です)。

問題をすばやく表示するために、コードを単純化しました。

Visual Studio 2008、.Net 3.5 で作成 (VS 2012 でテスト、問題はまだ存在)

Aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IEMemLeak.aspx.cs" Inherits="TestWebsite.IEMemLeak" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:ScriptManager runat="server" ID="ScriptManager" EnablePartialRendering="True" ></asp:ScriptManager>
      <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
          <ContentTemplate>          
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>          
          </ContentTemplate>
        </asp:UpdatePanel>
      </div>
    </form>
</body>
</html>

Aspx.cs:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestWebsite
{
  public partial class IEMemLeak : Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      PlaceHolder1.Controls.Clear();
      PlaceHolder1.Controls.Add(new Button { ID = "PostbackButton", Text = "Click Me"});

      //This is where we'd pull dynamic controls from databased templates. simplified as a for loop to create a lot of controls (makes the mem issue really stand out)
      for (int i = 0; i < 500; i++)
      {
        TextBox textbox = new TextBox {ID = "TextBox" + i, Text = "abc" + i, CausesValidation = true};
        RequiredFieldValidator requiredFieldValidator = new RequiredFieldValidator { ControlToValidate = "TextBox" + i};

        PlaceHolder1.Controls.Add(textbox);
        PlaceHolder1.Controls.Add(requiredFieldValidator);
      }
    }
  }
}

これが最も洗練された例ではないことはわかっていますが、デモンストレーション目的には十分だと思います。

誰かがこのエラーまたは同様のエラーに遭遇したことがありますか (そして回避策を管理しましたか)?

4

0 に答える 0