none
UpdatePanel内にListViewを入れるとメモリリークが起きる RRS feed

  • 質問

  • お世話になります。

    下記問題が解決できず、困っています。
    ■問題

     UpdatePanel内にListViewを入れるとメモリリークが起きる

    ■欲しい結果

     メモリリークが起きないようにしたい

    ■環境

     ・OS:Windows 7

     ・開発:Visual Studio 2008 Standard Edition 日本語

     ・ブラウザ:IE8,IE9

    ■ソース

    ○aspx

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %>

    <!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 id="Head1" runat="server">
        <title>無題のページ</title>
    </head>
    <body>
    <form name="timer" runat="server">

            <div>
                <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
                </ajaxToolkit:ToolkitScriptManager>
            </div>

            <asp:LinkButton ID="LinkButton1" runat="server" Text="クリック" />

            <div>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
                <contenttemplate>
                    <asp:ListView ID="ListView1" runat="server">
                        <LayoutTemplate>
                            <table summary="summary">
                                <thead>
                                    <tr id="trThead" runat="server" >
                                        <th scope="col">
                                            <asp:LinkButton ID="lblImg" runat="server" />
                                        </th>
                                        <th scope="col">
                                            <asp:LinkButton ID="lblNo" runat="server" />
                                        </th>
                                        <th scope="col">
                                            <asp:LinkButton ID="lblName" runat="server" />
                                        </th>
                                    </tr>
                                </thead>
                                <tfoot>
                                </tfoot>
                                <tbody>
                                    <tr>
                                        <td colspan="3">
                                            <div>
                                                <table>
                                                    <tr id="ItemPlaceHolder" runat="server">
                                                    </tr>
                                                </table>
                                            </div>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </LayoutTemplate>

                        <ItemTemplate>
                            <tr style="background-color:#FFFFFF" >
                                <td>
                                    <asp:Image ID="Image1" runat="server" ImageUrl="image.png" />
                                </td><td>
                                    <%#Eval("No")%>
                                </td><td>
                                    <%#Eval("lblName")%>
                                </td>
                            </tr>
                        </ItemTemplate>

                    </asp:ListView>

                </contenttemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
                    </Triggers>
                </asp:UpdatePanel>
            </div>


    </form>
    </body>
    </html>




    ○VB

    Partial Public Class _Default
        Inherits System.Web.UI.Page

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                If IsPostBack = False Then
                Else
                    '2回目以降
                End If

                '名前リスト
                Call sublistview()


            Catch ex As Exception
                '
            End Try

        End Sub

        Protected Sub lnkShow_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LinkButton1.Click

        End Sub

        Private Sub sublistview()

            Dim dt As DataTable = New DataTable()

            Dim rnd As New Random
            Dim strText As String = String.Empty

            'テーブル項目設定
            dt.Columns.AddRange(New DataColumn() { _
                                   New DataColumn("No", Type.GetType("System.String")), _
                                   New DataColumn("lblName", Type.GetType("System.String")) _
                                   })

            dt.Rows.Add("1", "佐藤")
            dt.Rows.Add("2", "鈴木")
            dt.Rows.Add("3", "高橋")
            dt.Rows.Add("4", "田中")
            dt.Rows.Add("5", "伊藤")
            dt.Rows.Add("6", "渡辺")
            dt.Rows.Add("7", "山本")
            dt.Rows.Add("8", "中村")
            dt.Rows.Add("9", "小林")
            dt.Rows.Add("10", "加藤")

            Select Case rnd.Next(1, 10)
                Case 1
                    strText = "吉田"
                Case 2
                    strText = "山田"
                Case 3
                    strText = "佐々木"
                Case 4
                    strText = "山口"
                Case 5
                    strText = "松本"
                Case 6
                    strText = "井上"
                Case 7
                    strText = "木村"
                Case 8
                    strText = "林"
                Case 9
                    strText = "斉藤"
                Case 10
                    strText = "清水"
            End Select

            dt.Rows.Add("11", strText)

            ListView1.DataSource = dt
            ListView1.DataBind()

            '解放
            rnd = Nothing
            dt = Nothing


        End Sub

    End Class




    上記ソースで表示される画面のリンクボタン(クリック)をクリックし続けると、
    リソースモニターのコミット等が少しずつ上がっていきます。
    (最終的にメモリ不足でブラウザが落ちてしまいます)

    IE8がメモリリークし易い事までは分かったのですが、
    どうもIE9等でもメモリリークが起きている様です。

    ASP.NET初心者の為、ソースの作りが悪いのかと思っています。
    よろしければご教授頂けると嬉しいです。

    以上、よろしくお願い致します。




    追記(2013/06/13 09:50):
     初回投稿時のソースでメモリリークが起きているのは、
     Web.Configの設定がデバッグモードになっていた為と判明致しました。
     大変失礼致しました。(それでも、少しずつなるようですが...)

     上記を踏まえてメモリリークが起こるソースに修正しました。
     aspx側のソースのListView宣言時に、1列目に画像を表示する様に致しました。
     (検証される場合は恐縮ですが、適当な画像を『image.png』でご用意下さい)

    追記(2013/06/14 10:11):
     メモリリークが起きているのはクライアント側となります。

     引き続き、よろしくお願い致します。


                                         
    • 編集済み rokuroku 2013年6月14日 1:21
    2013年6月12日 9:30

回答

  •  どこの、メモリがリークしているのでしょうか。サーバーですか?クライアントですか?IE が落ちるということはクライアントのメモリがリークしているとお考えのようですが、そんなことはないはずです。Web.Config の設定は、サーバ側ですよね?切り分けをしましょう。

     また、変数に Nothing を代入しても解放にはなりません。メモリはGC が管理しており(だから「Managed」)、一見増え続けるようでも、GC が考える適切なタイミングで解放されます。開発者が気にしなければならないのはメモリ以外のリソースで、それは Nothing を代入しても解放されません。もっとも、メモリが解放されるタイミングで解放されるようにコード化されていることを期待しても良いでしょう(ただし、自分でコーディングしている場合は除く)。


    Jitta@わんくま同盟

    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月13日 13:39
  • > 的を絞ったソースを投稿させて頂きました。

    的を絞るのは結構ですが、問題が再現できないと話にならないです。私が使った時間は全くのムダだったようで、あんまりな話です。

    それから、最初の質問に「ASP.NET初心者の為」と書いてあったのですが、「現在作成している画面に近いソース」は初心者が書いたコードには見えませんけど。

    rokuroku さんが初心者らしいのは、Jitta さんへのレスで、サーバー側で起こることとクライアント側で起こることの区別がついてないのを見ると、そうなのかなとも思いますが。

    ひょっとして、初心者ではない他の人が書いたアプリの保守を、会社の上司などに言われて、初心者の質問者さんが作業しているというような状況なのですか? であれば、掲示板で他人に聞くような話ではなく、社内で解決すべきと思います。

    たぶん、原因は JavaScript のコードで循環参照があって、メモリの開放がうまくいってないからだと思います。

    Internet Explorer リーク パターンを理解して解決する
    http://msdn.microsoft.com/ja-jp/library/bb250448(v=vs.85).aspx

    調査のためのツールもあるようですので、ググって調べてください。

    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月14日 3:54
  • UpdatePanel + Timer でJavascriptのメモリーリークが発生したことがあります。

    UpdatePanel Timer memory leak とかで検索するとちょこちょこ出てきます。

    実際にどのメソッドで発生しているかまでは突き止めていませんが、その時はUpdatePanelをやめてWCF+Knockoutで書き直しました。


    • 回答としてマーク rokuroku 2013年6月14日 5:05
    • 回答としてマークされていない rokuroku 2013年6月14日 5:06
    • 回答の候補に設定 星 睦美 2013年6月14日 6:02
    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月14日 2:19

すべての返信

  • アップされていたコード(画像を入れたもの)をコピペして試してみましたが、IE8, IE9 共にメモリーリークが起こるようなことはなかったです。リソースモニターで見て iexplore.exe のメモリ消費量は微増減しますが「最終的にメモリ不足でブラウザが落ちてしまいます」ということはあり得ない状況です。開発マシン (Vista Ultimate SP2) 上の IIS7 で、VS2010 Pro からデバッグ実行しても同じです。
     
    質問者さん固有の問題ではないのでしょうか? 検証のためレンタルサーバーにアップしたので試してみてください。

    http://surferonwww.info/Test/MSDNListViewInUpdatePanel.aspx


    なお、当方の環境は以下の通りです。

    <サーバー側>
    Windows Server 2008(開発環境では Vista Ultimate SP2)
    IIS7
    ASP.NET 3.5
    AjaxControlToolkit.dll  3.5.51116.0

    <クライアント側>
    Vista Ultimate SP2
    IE9

    Vista Home Premium SP2
    IE8

    コードはほぼコピペですが、念のため貼っておきます。

    aspx ページ

    <%@ Page Language="VB" 
        AutoEventWireup="false" 
        CodeFile="MSDNListViewInUpdatePanel.aspx.vb" 
        Inherits="Test_MSDNListViewInUpdatePanel" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
    
    <!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">
        <div>
            <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
            </asp:ToolkitScriptManager>
        </div>
        
        <asp:LinkButton ID="LinkButton1" runat="server" Text="クリック" TabIndex="2" />
     
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
                <contenttemplate>
                    <asp:ListView ID="ListView1" runat="server">
                         <LayoutTemplate>
                             <table summary="summary">
                                 <thead>
                                     <tr id="trThead" runat="server" >
                                         <th scope="col">
                                             <asp:LinkButton ID="lblImg" runat="server" />
                                         </th>
                                         <th scope="col">
                                             <asp:LinkButton ID="lblNo" runat="server" />
                                         </th>
                                         <th scope="col">
                                             <asp:LinkButton ID="lblName" runat="server" />
                                         </th>
                                     </tr>
                                 </thead>
                                 <tfoot>
                                 </tfoot>
                                 <tbody>
                                     <tr>
                                         <td colspan="3">
                                             <div>
                                                 <table>
                                                     <tr id="ItemPlaceHolder" runat="server">
                                                     </tr>
                                                 </table>
                                             </div>
                                         </td>
                                     </tr>
                                 </tbody>
                             </table>
                         </LayoutTemplate>
                         
                         <ItemTemplate>
                             <tr style="background-color:#FFFFFF" >
                                 <td>
                                     <asp:Image ID="Image1" runat="server" ImageUrl="~/images/image.png" />
                                 </td><td>
                                     <%#Eval("No")%>
                                 </td><td>
                                     <%#Eval("lblName")%>
                                 </td>
                             </tr>
                         </ItemTemplate>
     
                    </asp:ListView>
                     
                </contenttemplate>
                
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>
    </html>
    

    コードビハインド

    Imports System.Data
    
    Partial Class Test_MSDNListViewInUpdatePanel
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                If IsPostBack = False Then
                Else
                    '2回目以降
                End If
    
                '名前リスト
                Call sublistview()
    
    
            Catch ex As Exception
                '
            End Try
    
        End Sub
    
        Protected Sub lnkShow_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LinkButton1.Click
    
        End Sub
    
        Private Sub sublistview()
    
            Dim dt As DataTable = New DataTable()
    
            Dim rnd As New Random
            Dim strText As String = String.Empty
    
            'テーブル項目設定
            dt.Columns.AddRange(New DataColumn() { _
                                   New DataColumn("No", Type.GetType("System.String")), _
                                   New DataColumn("lblName", Type.GetType("System.String")) _
                                   })
    
            dt.Rows.Add("1", "佐藤")
            dt.Rows.Add("2", "鈴木")
            dt.Rows.Add("3", "高橋")
            dt.Rows.Add("4", "田中")
            dt.Rows.Add("5", "伊藤")
            dt.Rows.Add("6", "渡辺")
            dt.Rows.Add("7", "山本")
            dt.Rows.Add("8", "中村")
            dt.Rows.Add("9", "小林")
            dt.Rows.Add("10", "加藤")
    
            Select Case rnd.Next(1, 10)
                Case 1
                    strText = "吉田"
                Case 2
                    strText = "山田"
                Case 3
                    strText = "佐々木"
                Case 4
                    strText = "山口"
                Case 5
                    strText = "松本"
                Case 6
                    strText = "井上"
                Case 7
                    strText = "木村"
                Case 8
                    strText = "林"
                Case 9
                    strText = "斉藤"
                Case 10
                    strText = "清水"
            End Select
    
            dt.Rows.Add("11", strText)
    
            ListView1.DataSource = dt
            ListView1.DataBind()
    
            '解放
            rnd = Nothing
            dt = Nothing
    
    
        End Sub
    
    
    
    
    End Class
    

    2013年6月13日 4:34
  • To:SurferOnWww様

    早速のご返答、ありがとうございます。
    レンタルサーバーにまでアップして頂き、感謝感激をしております。
    (確認した所、確かに微増減のみしておりました。)

    メモリ不足で落ちてしまうと言うのは、かなり飛躍した表現でした。
    申し訳ございません。


    元々作成している画面にてメモリリーク⇒タイマーの自動更新⇒落ちる
    といった現象が発生しており、
    それの確認をしている間に表題の内容が原因の一つではないかと思い、
    的を絞ったソースを投稿させて頂きました。
    (データ数が少なく微増減しかしなかった様です、分かりにくくなってしまい申し訳ございません)


    大変恐縮ですが、こちらでお試し頂いてもよろしいでしょうか?
    現在作成している画面に近いソースとなっており、
    データ量を増やしている為、メモリリークが発生しやすいです。
    (ただ、表題の件から離れかねないうえ、ソースの量が多いです。
     もしよろしければ、で結構でございます。)


    ■ファイル構成
     ・AppMaster.Master(マスタ画面)
     ・Default.aspx(メイン画面)
     ・Default.css(メイン画面のスタイルシート)
     ・jquery.js(jqueryのjsファイル) Ver.1.7.2を使用しております


    画像は全て統一して『image.png』としております。(画面的に少し気持ち悪いかもしれません)
    『データ表示』で再描画、『自動更新』で1秒毎に『データ表示』の処理を繰り返します。

    以下、ソースです。

    ○AppMaster.Master(マスタ画面) - aspx

    <%@ Master Language="VB" AutoEventWireup="false" CodeBehind="AppMaster.master.vb" Inherits="LeakTest.AppMaster" %>
    
    <!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>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            
            </asp:ContentPlaceHolder>
        </div>
        </form>
    </body>
    </html>
    




    ○AppMaster.Master(マスタ画面) - vb

    Public Partial Class AppMaster
        Inherits System.Web.UI.MasterPage
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        End Sub
    
    End Class




    ○Default.aspx(メイン画面) - aspx

    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="AppMaster.Master" CodeBehind="Default.aspx.vb" Inherits="LeakTest.WebForm1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    
        <!-- 互換モード表示禁止 -->
        <meta http-equiv="X-UA-Compatible" content="IE=100" />
    
        <!-- スタイルシート読み込み -->
        <link rel="stylesheet" href="Default.css" type="text/css" />
        
        <!-- JQuery読み込み -->
        <script type="text/javascript" src="jquery.js" ></script>
        
        <script type="text/javascript">
    
            var con_SelectedColor = "#99CCFF";
            var con_HoverColor = "#e7f3f7";
            var con_NormalColor = "#FFFFFF";
            var search = "false";
            var slctd_objTD = "";
    
            function onTarget() {
    
                $get("<%=hideddlSearch1Cancel.ClientID%>").value = $get("<%=ddlSearch1.ClientID%>").value;
    
            }
    
            function onCancel() {
    
                var target = $find("ModalPopupBehaviourID");
    
                $get("<%=ddlSearch1.ClientID%>").value = $get("<%=hideddlSearch1Cancel.ClientID%>").value;
    
                target.hide();
                delete target;
            }
    
            function onOK() {
    
                search = "true";
    
                var target = $find("ModalPopupBehaviourID");
    
                //
                target.hide();
    
                //データ表示ボタン押下
                var elem = $get("<%=lnkShow.ClientID%>");
    
                CallOnClick(elem)
    
                search = "false";
    
                // 解放
                delete target;
                delete elem;
            }
    
            function funCloseContextMenu() {
                $('#divContextMenu').hide();
            }
    
            function funUnbindControlEvents() {
                $('tr.clsTr').unbind("mouseover").unbind("mouseout").unbind("click");
                $('td.showContext').unbind("click");
                $(document).not('.menu').unbind("click");
                $('div.inner').unbind("scroll");
    
                $("[id$='btnpop1']").removeAttr("OnClientClick");
                $("[id$='btnpop2']").removeAttr("OnClientClick");
                $("[id$='btnpop3']").removeAttr("OnClientClick");
                $("[id$='btnpop4']").removeAttr("OnClientClick");
                $("[id$='lnkpop1']").removeAttr("OnClientClick");
                $("[id$='lnkpop2']").removeAttr("OnClientClick");
                $("[id$='lnkpop3']").removeAttr("OnClientClick");
                $("[id$='lnkpop4']").removeAttr("OnClientClick");
                $("[id$='lnkCol1']").removeAttr("OnInit");
                $("[id$='lnkCol2']").removeAttr("OnInit");
                $("[id$='lnkCol3']").removeAttr("OnInit");
                $("[id$='lnkCol4']").removeAttr("OnInit");
                $("[id$='lnkCol5']").removeAttr("OnInit");
                $("[id$='lnkCol6']").removeAttr("OnInit");
                $("[id$='lnkCol7']").removeAttr("OnInit");
                $("[id$='lnkSearch']").removeAttr("OnClientClick");
                $("[id$='btnOk']").removeAttr("OnClientClick");
                $("[id$='btnCancel']").removeAttr("OnClientClick");
                $("[id$='lnkHelpStyle']").removeAttr("OnClientClick");
    
            }
            function funBindControlEvents() {
    
                //ListView:hover 色制御
                $('tr.clsTr').bind("mouseover", function() {
                    var slctd_row = $("#<%= HiddenSelectedRow.ClientID %>").val();
                    if ((slctd_row != $(this).index()) || (slctd_row == "none")) {
                        $(this).css("backgroundColor", con_HoverColor);
                    }
                    delete slctd_row; 
                }).bind("mouseout", function() {
                    var slctd_row = $("#<%= HiddenSelectedRow.ClientID %>").val();
                    if ((slctd_row != $(this).index()) || (slctd_row == "none")) {
                        $(this).css("backgroundColor", con_NormalColor);
                    }
                    delete slctd_row; 
                });
    
                //ListView:click時 色制御
                $('tr.clsTr').bind("click", function() {
                    $('tr.clsTr').css("backgroundColor", con_NormalColor);
                    $("#<%= HiddenSelectedRow.ClientID %>").val($(this).index());
                    $(this).css("backgroundColor", con_SelectedColor);
                });
    
                //ListView:tdクリック時 ポップアップメニュー表示処理
                $('td.showContext').bind("click", function(e) {
    
                    slctd_objTD = $(this);
                    var trOffset = $(this).closest('tr').offset();
                    var offsetTop = e.pageY;
                    var offsetLeft = (e.pageX - trOffset.left) + 35;
    
                    // 表示を画面内に収める
                    if ($(window).height() < offsetTop + $('#divContextMenu').height()) {
                        offsetTop = offsetTop - $('#divContextMenu').height();
                    }
                    if ($(window).width() < offsetLeft + $('#divContextMenu').width()) {
                        offsetLeft = offsetLeft - $('#divContextMenu').width();
                    }
    
                    $('#divContextMenu').css({
                        top: offsetTop + 'px',
                        left: offsetLeft + 'px'
                    }).show();
    
                    var elemnt = slctd_objTD;
                    var PointH = $(elemnt).closest('tr').find('td').closest('td.td12').text();
                    PointH = PointH.replace(/(^\s+)|(\s+$)/g, "");
    
                    delete trOffset;
                    delete offsetTop;
                    delete offsetLeft;
                    delete elemnt;
                    delete PointH;
                });
    
                // ListView以外クリック時 ポップアップメニュー非表示処理
                $(document).bind("click", function(e) {
                    var tid = e.target.id;
                    var cls = e.target.className;
    
                    if ((cls.indexOf("divTd1") < 0) && (cls.indexOf("showContext") < 0) && (tid.indexOf("ListView1") < 0)) {
                        funCloseContextMenu();
                    }
    
                    delete tid;
                    delete cls;
                });
    
                //ListView:スクロール時 ポップアップメニュー非表示処理
                $('div.inner').bind("scroll", function() {
                    funCloseContextMenu();
                });
            }
    
            $(document).ready(function() {
    
                Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
                Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    
                function PageLoadedHandler(sender, args) {
    
                    // Clickイベント追加 
                    funBindControlEvents();
                }
    
                function BeginRequestHandler(sender, args) {
                    var position = 0;
    
                    var loading = $find("ModalPopupBehaviourID_ProgressLoading");
                    loading.show();
                    delete loading; // 解放
    
                    if ((sender._postBackSettings.sourceElement.id != $("#<%=lnkShow.ClientID%>")[0].id) ||
                       (((sender._postBackSettings.sourceElement.id == $("#<%=lnkShow.ClientID%>")[0].id) && (search == "false")))) {
                        position = $('div.inner').scrollTop();
                    }
    
                    $("#<%= HiddenScrollPosition.ClientID %>").val(position);
    
                    // Clickイベント削除 
                    funUnbindControlEvents();
    
                    delete position; // 解放
    
                }
                function EndRequestHandler(sender, args) {
    
                    // スクロール位置設定
                    var position = $("#<%= HiddenScrollPosition.ClientID %>").val();
                    $('div.inner').scrollTop(position);
    
                    var loading = $find("ModalPopupBehaviourID_ProgressLoading");
                    loading.hide();
    
                    if (sender._postBackSettings.sourceElement) {
                        if ((sender._postBackSettings.sourceElement.id == $("#<%=lnkpop1.ClientID%>")[0].id) ||
                            (sender._postBackSettings.sourceElement.id == $("#<%=lnkpop2.ClientID%>")[0].id)) {
    
                            // ListView選択行背景色設定
                            $('tr.clsTr').css("backgroundColor", con_NormalColor);
                            var slctd_row = $("#<%= HiddenSelectedRow.ClientID %>").val();
                            if (slctd_row != "none") {
                                $('tr.clsTr').eq(slctd_row).css("backgroundColor", con_SelectedColor);
                            }
                            delete slctd_row; // 解放
                        }
                    }
    
                    // Clickイベント追加
                    funBindControlEvents();
    
                    // 解放
                    delete position;
                    delete loading;
                }
    
                // 解放
                $(window).unload(function() {
    
                    // Clickイベント削除 
                    funUnbindControlEvents();
    
                    delete con_SelectedColor;
                    delete con_HoverColor;
                    delete con_NormalColor;
                    delete search;
                    delete slctd_objTD;
    
                    $(window).empty();
                });
            });
    
            function CallOnClick(elem) {
    
                var userAgent = window.navigator.userAgent.toLowerCase();
    
    
                if (userAgent.indexOf('msie') != -1) {
    
                    elem.click();
    
                } else if (userAgent.indexOf('chrome') != -1) {
    
                    elem.click();
    
                } else if (userAgent.indexOf('safari') != -1) {
    
                    var evt = document.createEvent("MouseEvents");  // マウスイベントを作成
                    evt.initEvent("click", false, true);            // イベントの詳細を設定
                    elem.dispatchEvent(evt);                        // イベントを強制的に発生させる
    
                } else if (userAgent.indexOf('firefox') != -1) {
    
                    var evt = document.createEvent("MouseEvents");  // マウスイベントを作成
                    evt.initEvent("click", false, true);            // イベントの詳細を設定
                    elem.dispatchEvent(evt);                        // イベントを強制的に発生させる
    
                } else {
    
                    elem.click();
                }
    
                // 解放
                delete userAgent;
                delete evt;
     
            }
        </script>
    
    </asp:Content>
    
    <asp:Content ID="con" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    
        <!-- このコントロールは1番上に記述すること -->
        <div class="toolKitStyle">
            <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
            </ajaxToolkit:ToolkitScriptManager>
        </div>
        
        <div id="divHidden">
            <asp:HiddenField ID="hideddlSearch1Cancel" runat="server" />
        </div>    
        
        <div id="divMain">
         <!--ボタンコントロール(待機処理[除外])-->
    
        <!--検索条件ボタン-->    
        <asp:LinkButton ID="lnkSearch" runat="server" 
            Text="検索条件" CssClass="lnkSearchStyle"  
            OnClientClick="onTarget();" style="width: 48px" />
                
        <ajaxToolkit:ModalPopupExtender ID="lnkSearch_ModalPopupExtender" runat="server" 
            DynamicServicePath="" Enabled="True" 
            PopupControlID="pnlSearch" TargetControlID="lnkSearch" 
            DropShadow="True" X="0" Y="0" BackgroundCssClass="backStyle" BehaviorID="ModalPopupBehaviourID">
        </ajaxToolkit:ModalPopupExtender>
    
        <!-- 検索条件ポップアップ -->
        <asp:Panel ID="pnlSearch" runat="server" CssClass="pnlSearchStyle" style="display:none">
            <asp:Panel ID="pnl" runat="server" CssClass="pnlStyle" DropShadow="True">
    
                <!-- 種別選択 -->
                <asp:Label ID="lblSearch1" runat="server" Text="検索条件(特に意味はない)" CssClass="lblKindStyle"></asp:Label>
                <asp:DropDownList ID="ddlSearch1" runat="server" CssClass="ddlSearch1Style">
                </asp:DropDownList>          
                <br />
                
                <asp:Button ID="btnOk" runat="server" Text="OK" CssClass="btnOkStyle" OnClientClick="onOK();return false;" />
                <asp:Button ID="btnCancel" runat="server" Text="キャンセル" CssClass="btnCancelStyle" OnClientClick="onCancel();return false;" />
            </asp:Panel>
        </asp:Panel>
        
    
        <asp:ImageButton ID="btnpop3" runat="server" OnClientClick="javascript:return confirm('テストポップアップ3');" 
        ImageUrl="image.png" CssClass="btnpop3Style" width="90px" Height="30px" />
    
        <asp:ImageButton ID="btnpop4" runat="server" OnClientClick="javascript:return confirm('テストポップアップ4');" 
                ImageUrl="image.png" CssClass="btnpop4Style" width="90px" Height="30px"/>   
    
        <!-- モーダル画面 -->
            <iframe id="Iframe1" src="about:blank" style="display: none">
            </iframe>
            <iframe id="Iframe2" src="about:blank" style="display: none">
            </iframe>
    
    
           
        <!--自動更新処理-->
        <div class = "timUpdateStyle">
            <asp:Timer ID="timUpdate" runat="server" Interval="1000" Enabled="False">
            </asp:Timer>
        </div>
    
        <!--ボタンコントロール(待機処理[対象])-->
        <asp:LinkButton ID="lnkShow" runat="server" 
            Text="データ表示" CssClass="lnkShowStyle"   />
    
        <!--自動更新 チェックボックス -->
        <asp:CheckBox ID="chkAuto" runat="server" AutoPostBack="True" Text="自動更新" 
            CssClass="chkAutoStyle" />
        
    
        <!-- 待機処理(対象範囲開始) -->
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" >
        <contenttemplate>
            <asp:ImageButton ID="btnpop1" runat="server" 
            ImageUrl="image.png" CssClass="btnpop1Style" width="90px" Height="30px" OnClientClick="javascript:return confirm('テストポップアップ1');" />
    
            <asp:ImageButton ID="btnpop2" runat="server" 
            ImageUrl="image.png" CssClass="btnpop2Style" width="90px" Height="30px" OnClientClick="javascript:return confirm('テストポップアップ2');" />
    
    
            <div id="divUpdatePanle2">
    
                    <!--検索条件表示-->
                    <asp:Panel ID="PnlCondition" runat="server" CssClass="pnlConditionStyle" DropShadow="True" ScrollBars="Auto">
                        <!--タイトル表示-->
                        <asp:Image ID="imgCndTitle" runat="server" CssClass="imgCndTitleStyle" ImageUrl="image.png"
                            Width="30px" />
                        <asp:Label ID="lblCndTitle" runat="server" CssClass="lblCndTitleStyle" Text="メモリリークテスト" ></asp:Label>
                        &nbsp<!-- スペース挿入(半角) -->
                        &nbsp<!-- スペース挿入(半角) -->
                        &nbsp<!-- スペース挿入(半角) -->
                        &nbsp<!-- スペース挿入(半角) -->
                        &nbsp<!-- スペース挿入(半角) -->
                        &nbsp<!-- スペース挿入(半角) -->
                        <!--検索条件表示-->
                        <asp:Image ID="imgCndSearch1" runat="server" CssClass="imgCndSearch1Style" ImageUrl="image.png" width="10px"/>
                        <asp:Label ID="lblCndSearch1" runat="server" CssClass="lblCndSearch1Style" Text="検索条件1" ></asp:Label>                    
                    </asp:Panel>
                    
                    
                    <!-- グラフ枠 -->
                    <asp:Panel ID="pnlDraw" runat="server" CssClass="pnlDrawStyle" Width="960px">
                    </asp:Panel>
    
                    <!-- リストビュー -->
                    <div class="divListView1">
                        <asp:ListView ID="ListView1" runat="server">
                            <LayoutTemplate>
                                <table class="tableone" summary="summary">
                                    <thead>
                                        <tr id="trThead" runat="server" >
                                            <th class="th1" scope="col">
                                                <asp:LinkButton ID="lnkCol1" runat="server" CommandArgument="Col1"
                                                    CssClass="HeaderStyle" Text="項目1" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th2" scope="col">
                                                <asp:LinkButton ID="lnkCol2" runat="server" CommandArgument="Col2"
                                                    CssClass="HeaderStyle" Text="項目2" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th3" scope="col">
                                                <asp:LinkButton ID="lnkCol3" runat="server" CommandArgument="Col3"
                                                    CssClass="HeaderStyle" Text="項目3" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th4" scope="col">
                                                <asp:LinkButton ID="lnkCol4" runat="server" CommandArgument="Col4"
                                                    CssClass="HeaderStyle" Text="項目4" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th5" scope="col">
                                                <asp:LinkButton ID="lnkCol5" runat="server" CommandArgument="Col5"
                                                    CssClass="HeaderStyle" Text="項目5" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th6" scope="col">
                                                <asp:LinkButton ID="lnkCol6" runat="server" CommandArgument="Col6"
                                                    CssClass="HeaderStyle" Text="項目6" OnInit="subInit_lnk"/>
                                            </th>
                                            <th class="th7" scope="col">
                                                <asp:LinkButton ID="lnkCol7" runat="server" CommandArgument="Col7"
                                                    CssClass="HeaderStyle" Text="項目7" OnInit="subInit_lnk"/>
                                            </th>
                                        </tr>
                                    </thead>
                                    <tfoot>
                                    </tfoot>
                                    <tbody>
                                        <tr>
                                            <td colspan="7">
                                                <div class="inner">
                                                    <table class="tabletwo">
                                                        <tr id="ItemPlaceHolder" runat="server">
                                                        </tr>
                                                    </table>
                                                </div>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </LayoutTemplate>
                            
                            <ItemTemplate>
                                <tr class="clsTr" style="background-color:#FFFFFF" >
                                    <td class="td1 showContext" scope="row" valign="middle">
                                        <div style=";" class="divTd1"><asp:Image ID="imgColImg1" runat="server" ImageUrl='<%#Eval("ColImg1")%>' ImageAlign="AbsMiddle" /><asp:Image ID="imgColImg2" runat="server" ImageUrl='<%#Eval("ColImg2")%>' CssClass="imgColImgStyle" ImageAlign="AbsMiddle" /><asp:Image ID="imgColImg3" runat="server" ImageUrl='<%#Eval("ColImg3")%>' CssClass="imgColImgStyle" ImageAlign="AbsMiddle" /><asp:Image ID="imgColImg4" runat="server" ImageUrl='<%#Eval("ColImg4")%>' CssClass="imgColImgStyle" ImageAlign="AbsMiddle" />&nbsp<asp:Label ID="lblCol1" runat="server" Text='<%#Eval("Col1")%>' CssClass="lblCol1Style" /></div>
                                    </td><td class="td2 showContext">
                                        <%#Eval("Col2")%>
                                    </td><td class="td3 showContext">
                                        <%#Eval("Col3")%>
                                    </td><td class="td4 showContext">
                                        <%#Eval("Col4")%>
                                    </td><td class="td5 showContext">
                                        <%#Eval("Col5")%>
                                    </td><td class="td6 showContext">
                                        <%#Eval("Col6")%>
                                    </td><td class="td7 showContext">
                                        <asp:Label ID="lblCol7" runat="server" Text='<%#Eval("Col7")%>'></asp:Label>
                                    </td><td class="td8">
                                        <asp:Label ID="lblColbld1" runat="server" Text='<%#Eval("Colbld1")%>' />
                                    </td><td class="td9">
                                        <asp:Label ID="lblColbld2" runat="server" Text='<%#Eval("Colbld2")%>' />
                                    </td><td class="td10">
                                        <asp:Label ID="lblColbld3" runat="server" Text='<%#Eval("Colbld3")%>' />
                                    </td><td class="td11">
                                        <asp:Label ID="lblColbld4" runat="server" Text='<%#Eval("Colbld4")%>' />
                                    </td><td class="td12">
                                        <asp:Label ID="lblColbld5" runat="server" Text='<%#Eval("Colbld5")%>' />
                                    </td>
                                </tr>
                            </ItemTemplate>
    
                            <EmptyDataTemplate>
                               <asp:label ID="lblNotDataMessage" runat="server" Text="表示データがありません" CssClass="lblNotDataMessageStyle"></asp:label>
                            </EmptyDataTemplate>
    
                        </asp:ListView>
                    </div>
    
                    <ajaxToolkit:PopupControlExtender ID="PopupControlExtender1"  BehaviorID="PopupControlExtenderBId1" runat="server" TargetControlID="HiddenPopupMenu" PopupControlID="divContextMenu">
                    </ajaxToolkit:PopupControlExtender>
                    <asp:Button runat="server" ID="HiddenPopupMenu" style="display:none"/>
                    
                    <div id="divContextMenu" class="pEditStyle">
                        <ul class="ulContextMenu">
                            <li id="lilnkpop1"><asp:LinkButton ID="lnkpop1" runat="server" CssClass="pEditFontStyle" OnClientClick="javascript:return confirm('テストポップアップ1');" >ポップ1</asp:LinkButton></li>
                            <li id="lilnkpop2"><asp:LinkButton ID="lnkpop2" runat="server" CssClass="pEditFontStyle" OnClientClick="javascript:return confirm('テストポップアップ2');" >ポップ2</asp:LinkButton></li>
                            <li id="lilnkpop3"><asp:LinkButton ID="lnkpop3" runat="server" CssClass="pEditFontStyle" OnClientClick="javascript:return confirm('テストポップアップ3');" >ポップ3</asp:LinkButton></li>
                            <li id="lilnkpop4"><asp:LinkButton ID="lnkpop4" runat="server" CssClass="pEditFontStyle" OnClientClick="javascript:return confirm('テストポップアップ4');" >ポップ4</asp:LinkButton></li>
                        </ul>
                    </div>        
    
            </div>
            </contenttemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="lnkShow" EventName="Click" />
                    <asp:AsyncPostBackTrigger ControlID="timUpdate" EventName="Tick" />
                    
                    <asp:AsyncPostBackTrigger ControlID="chkAuto" EventName="CheckedChanged" />
    
                </Triggers>
        </asp:UpdatePanel>
        
        <!-- 待機処理ポップアップ -->
        <div id="waitProgress">
            <asp:Image ID="imgProgressLoading" runat="server" ImageUrl="image.png" ImageAlign="AbsMiddle" style="width: 100px; height: 100px;" />
            <div class="cls_ModalProgressDummyBtns">
                <input id="btnDummyLoadingOk" type="button" value="OK" />
                <input id="btnDummyLoadingCancel" type="button" value="Cancel" />
            </div>
        </div>
        <ajaxToolkit:ModalPopupExtender id="imgProgressLoading_ModalPopupExtender" runat="server"
            cancelcontrolid="btnDummyLoadingCancel" BehaviorID="ModalPopupBehaviourID_ProgressLoading" 
            okcontrolid="btnDummyLoadingOk" targetcontrolid="btnDummyLoadingtarget" 
            popupcontrolid="waitProgress" popupdraghandlecontrolid="ModalHeader" 
            drag="true" backgroundcssclass="backProgressStyle"> 
        </ajaxToolkit:ModalPopupExtender>
        <asp:Button runat="server" ID="btnDummyLoadingtarget" style="Display:none"/>
    
    
        <asp:HiddenField ID="HiddenScrollPosition" runat="server"  Value="0"/>
        <asp:HiddenField ID="HiddenSelectedRow" runat="server"  Value="none"/>
    
        </div>    
    
    </asp:Content>
    

    ○Default.aspx(メイン画面) - vb

    Public Partial Class WebForm1
        Inherits System.Web.UI.Page
    
    
        '画像項目
        Private Const PR_CNS_COL_IMAGE_1 As String = "ColImg1"
        Private Const PR_CNS_COL_IMAGE_2 As String = "ColImg2"
        Private Const PR_CNS_COL_IMAGE_3 As String = "ColImg3"
        Private Const PR_CNS_COL_IMAGE_4 As String = "ColImg4"
    
        '表示項目
        Private Const PR_CNS_COL_1 As String = "Col1"
        Private Const PR_CNS_COL_2 As String = "Col2"
        Private Const PR_CNS_COL_3 As String = "Col3"
        Private Const PR_CNS_COL_4 As String = "Col4"
        Private Const PR_CNS_COL_5 As String = "Col5"
        Private Const PR_CNS_COL_6 As String = "Col6"
        Private Const PR_CNS_COL_7 As String = "Col7"
    
        '隠し項目
        Private Const PR_CNS_COL_BLIND_1 As String = "Colbld1"
        Private Const PR_CNS_COL_BLIND_2 As String = "Colbld2"
        Private Const PR_CNS_COL_BLIND_3 As String = "Colbld3"
        Private Const PR_CNS_COL_BLIND_4 As String = "Colbld4"
        Private Const PR_CNS_COL_BLIND_5 As String = "Colbld5"
    
    
        ''' <summary>
        ''' 一覧表示用
        ''' </summary>
        ''' <remarks></remarks>
        Private Structure ST_GrpData
            '画像
            Dim imgData1 As String
            Dim imgData2 As String
            Dim imgData3 As String
            Dim imgData4 As String
            '表示
            Dim Data1 As String
            Dim Data2 As String
            Dim Data3 As String
            Dim Data4 As String
            Dim Data5 As String
            Dim Data6 As String
            Dim Data7 As String
            '隠し
            Dim bldData1 As String
            Dim bldData2 As String
            Dim bldData3 As String
            Dim bldData4 As String
            Dim bldData5 As String
    
        End Structure
    
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            If IsPostBack = False Then
                'データ表示ボタン
                Call lnkShow_Click(Nothing, Nothing)
            Else
    
            End If
    
        End Sub
    
        Private Sub chkAuto_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chkAuto.CheckedChanged
    
            Dim intInterval As Integer
    
            Try
                '
                If chkAuto.Checked = True Then
    
                    'タイマー起動
                    intInterval = 1
                    timUpdate.Interval = intInterval * 1000
                    timUpdate.Enabled = True
    
                Else
    
                    'タイマー停止
                    timUpdate.Enabled = False
    
                End If
    
                'データ表示ボタン
                Call lnkShow_Click(Nothing, Nothing)
    
            Catch ex As Exception
    
            End Try
    
    
        End Sub
    
        Private Sub lnkShow_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkShow.Click
    
            Try
    
    
                Dim stGrpData As ST_GrpData = Nothing
                Dim dt As DataTable = New DataTable()
    
                'テーブル項目設定
                dt.Columns.AddRange(New DataColumn() { _
                                       New DataColumn(PR_CNS_COL_IMAGE_1, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_IMAGE_2, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_IMAGE_3, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_IMAGE_4, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_1, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_2, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_3, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_4, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_5, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_6, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_7, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_BLIND_1, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_BLIND_2, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_BLIND_3, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_BLIND_4, Type.GetType("System.String")), _
                                       New DataColumn(PR_CNS_COL_BLIND_5, Type.GetType("System.String")) _
                                       })
    
    
                Dim intFacilitiesId As Integer
                Dim intCode As Integer
    
    
                intFacilitiesId = 1
    
                For intCode = 0 To 100
    
                    With stGrpData
    
                        .imgData1 = "image.png"
                        .imgData3 = "image.png"
                        .imgData2 = "image.png"
                        .imgData4 = "image.png"
                        .Data1 = "データ1番号" & intCode.ToString("000")
                        .Data2 = "データ2"
                        .Data3 = "データ3"
                        .Data4 = "データ4"
                        .Data5 = "データ5"
                        .Data6 = "データ6"
                        .Data7 = "データ7"
                        .bldData1 = intFacilitiesId.ToString()
                        .bldData2 = intCode.ToString()
                        .bldData3 = "データ8"
                        .bldData4 = "データ9"
                        .bldData5 = "データ10"
    
                        dt.Rows.Add(.imgData1, .imgData3, .imgData2, .imgData4, .Data1, _
                                        .Data2, .Data3, .Data4, .Data5, .Data6, .Data7, _
                                        .bldData1, .bldData2, _
                                        .bldData3, .bldData4, .bldData5)
                    End With
                Next
    
                ListView1.DataSource = dt
                ListView1.DataBind()
    
            Catch ex As Exception
    
            End Try
    
    
        End Sub
    
        Private Sub timUpdate_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timUpdate.Tick
    
            Try
                'データ表示ボタン
                Call lnkShow_Click(Nothing, Nothing)
    
            Catch ex As Exception
    
            End Try
    
        End Sub
    
        ''' <summary>
        ''' 項目名設定
        ''' </summary>
        Sub subInit_lnk(ByVal sender As System.Object, ByVal e As System.EventArgs)
    
            Dim lnk As LinkButton
            Dim strColName As String = String.Empty
    
            lnk = CType(sender, LinkButton)
    
            Select Case lnk.ID
                Case "lnkCol1"
                    strColName = "項目1"
                Case "lnkCol2"
                    strColName = "項目2"
                Case "lnkCol3"
                    strColName = "項目3"
                Case "lnkCol4"
                    strColName = "項目4"
                Case "lnkCol5"
                    strColName = "項目5"
                Case "lnkCol6"
                    strColName = "項目6"
                Case "lnkCol7"
                    strColName = "項目7"
            End Select
    
            lnk.Text = strColName
    
        End Sub
    
    End Class




    ○Default.css(メイン画面のスタイルシート)

    /* 枠 */
    .pnlDrawStyle
    {
    	z-index: 0;
    	;
    	width: 960px;
    	height: 400px;
    	left: 30px;
    	top: 200px;
        border: 1px solid #804040;
    }
    
    /* データ表示ボタン */
    .lnkShowStyle
    {
    	border-style: none;
    	z-index: inherit;
    	left: 430px;
    	top: 6px;
    	;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 12px;
    	color: #000000;
    	text-decoration: none;
    	white-space: nowrap;
    }
    .lnkShowStyle:hover
    {
    	color: #ffd700;
    }
    
    /* 検索条件ボタン */
    .lnkSearchStyle
    {
    	border-style: none;
    	z-index: inherit;
    	left: 530px;
    	top: 6px;
    	;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 12px;
    	color: #000000;
    	text-decoration: none;
    	white-space: nowrap;
    }
    .lnkSearchStyle:hover
    {
    	color: #ffd700;
    }
    
    /* 自動更新 タイマー */
    .timUpdateStyle
    {
    	;
    	z-index: inherit;
    	left: 865px;
    	top: 650px;
    }
    
    /* 自動更新 チェックボックス */
    .chkAutoStyle
    {
    	;
    	z-index: 1000;
    	left: 710px;
    	top: 6px;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	color: #000000;
    	font-size: 12px;
    	white-space: nowrap;
    }
    .chkAutoStyle:hover
    {
    	color: #ffd700;
    }
    input
    {
    	vertical-align: middle;
    }
    
    /* 検索条件 背景 */
    .backStyle
    {
    	background-color: #C0C0C0;
    	filter: alpha(opacity=70);
    	opacity: 0.7;
    }
    
    /* 検索条件 */
    .pnlSearchStyle
    {
    	;
    	z-index: inherit;
        left: 510px;
    	top: 30px;
    	width: 360px;
    	height: 100px;
    	background: #444244;
    }
    
    /* 検索条件 */
    .pnlStyle
    {
    	;
    	z-index: inherit;
    	left: 0px;
    	top: 0px;
    	width: 360px;
    	height: 100px;
    	background: #444244;
    }
    
    /* 検索条件1 */
    .lblSearch1Style
    {
    	;
    	top: 14px;
    	left: 10px;
    	width: 130px;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 15px;
    	color: #FFFFFF;
    }
    
    /* 検索条件1 */
    .ddlSearch1Style
    {
    	;
    	top: 12px;
    	left: 160px;
    	width: 190px;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 12px;
    }
    
    /* OKボタン */
    .btnOkStyle
    {
    	;
    	top: 70px;
    	left: 189px;
    	width: 80px;
    	border-style: none;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	background-color: #C6D9F1;
    }
    /* キャンセルボタン */
    .btnCancelStyle
    {
    	;
    	top: 70px;
    	left: 270px;
    	width: 80px;
    	border-style: none;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	background-color: #C6D9F1;
    }
    
    /************ 抽出条件表示 開始 ************/
    .pnlConditionStyle
    {
        ;
        z-index: inherit;
        top: 170px;
        left: 30px;
        Height: 30px;
        width: 960px;
        color: #FFFFFF;
    	background-color: #804040;
    }
    
    /* 画面タイトル */
    .imgCndTitleStyle
    {
        z-index: inherit;
        vertical-align:middle;
    }
    .lblCndTitleStyle
    {
        z-index: inherit;
        color: #FFFFFF;
        font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
        font-size: 16px;
        font-weight: bold;
        vertical-align:middle;
    }
    
    .imgCndSearch1Style
    {
    	z-index: inherit;
    	vertical-align: middle;
    }
    .lblCndSearch1Style
    {
    	z-index: inherit;
    	color: #FFFFFF;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 10px;
    	vertical-align: middle;
    }
    
    /* エラー文 */
    .lblCndErrStyle
    {
    	z-index: inherit;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 16px;
    	font-weight: bold;
    	vertical-align: middle;
    }
    /************ 抽出条件表示 終了 ************/
    
    
    body
    {
    	font-size: 14px;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    }
    
    /*ポップアップボタン1*/
    .btnpop1Style
    {
    	;
    	top: 140px;
    	left: 618px;
    }
    
    /*ポップアップボタン2*/
    .btnpop2Style
    {
    	;
    	top: 140px;
    	left: 712px;
    }
    
    /*ポップアップボタン3*/
    .btnpop3Style
    {
    	;
    	top: 140px;
    	left: 806px;
    }
    
    /*ポップアップボタン4*/
    .btnpop4Style
    {
    	;
    	top: 140px;
    	left: 900px;
    }
    
    .divListView1
    {
    	width: 955px;
    	;
    	left: 32px;
    	top: 201px;
    }
    
    .tableone
    {
    	border-collapse: collapse;
    	margin: 0 auto;
    }
    .tabletwo
    {
    	width: 100%;
    	border-collapse: collapse;
    	overflow:scroll;
    	table-layout:fixed;
    }
    .th1
    {
    	width: 255px;
    }
    .th2
    {
    	width: 128px;
    }
    .th3
    {
    	width: 112px;
    }
    .th4
    {
    	width: 82px;
    }
    .th5
    {
    	width: 130px;
    }
    .th6
    {
    	width: 130px;
    }
    .th7
    {
    	width: 112px;
    }
    .th8
    {
    	visibility: hidden;
    }
    .th9
    {
    	visibility: hidden;
    }
    .td1
    {
    	white-space: nowrap;
    	width: 252px;
    }
    .td2
    {
    	width: 128px;
    }
    .td3
    {
    	width: 111px;
    }
    .td4
    {
    	width: 82px;
    }
    .td5
    {
    	width: 130px;
    }
    .td6
    {
    	width: 129px;
    }
    .td7
    {
    	width: 92px;
    }
    .td8, .td9, .td10, .td11, .td12
    {
        display:none;
    }
    
    .tableone
    {
    	border: 1px solid #eee;
    	color: #fff;
    }
    .tableone td
    {
    	border: 1px solid #eee;
    	color: #fff;
    }
    .tableone tbody
    {
    	color: #000;
    }
    .tableone caption
    {
    	background: #fff;
    	color: #697210;
    	font-size: 1.2em;
    	margin: 0 auto;
    }
    
    .tableone tfoot td
    {
    	text-align: center;
    }
    
    .tabletwo td
    {
    	color: #000;
    }
    .tableone th
    {
    	background: #406000;
    	border: 1px solid #eee;
    	text-align: center;
    }
    .tabletwo th
    {
    	text-align: left;
    }
    .tabletwo tr.dk td
    {
    	background: #ddd;
    	color: #000;
    }
    
    .tableone tr{float: left;}
    .tableone tbody
    {
    	float: left;
    	overflow: auto;
    }
    
    .tabletwo tr{float: left;}
    .tabletwo tbody
    {
    	float: left;
    	overflow: auto;
    }
    
    .inner
    {
    	height: 365px;
    	overflow-y:scroll;
        overflow-x:hidden;
    }
    
    .HeaderStyle
    {
    	color: #FFFFFF;
    	overflow: auto;
    	text-align: center;
    }
    .imgColImgStyle
    {
    	;
    	top: 0px;
    	left: 0px;
    }
    .lblCol1Style
    {
    	;
    	top: 0px;
    	left: 40px;
    }
    
    /* 一覧内ホバーメニュー */
    .pEditStyle
    {
    	background-color: #444244; 
    	height:120px; 
    	width:100px; 
    
    	/* 丸角 */
    	-webkit-border-radius:5px;
    	-moz-border-radius:5px;
    	border-radius:5px;
    
    	/* 透明 */
    	opacity:0.92;
    	alpha:(opacity=92);
    	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=92);
    	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=92)";
    
    	/* 影 */
    	-moz-box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.6);
    	-webkit-box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.6);
    	box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.6);
    
    }
    /* 一覧内ホバーメニュー(文字フォント) */
    .pEditFontStyle
    {
    	top: 5px;
    	left: 5px;
    	;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 18px;
    	color: #FFFFFF;
    	text-decoration:none;
    }
    .pEditFontStyle:hover
    {
    	color:#ffd700; 
    }
    .pEditFontStyle[disabled]
    {
    	top: 5px;
    	left: 5px;
    	;
    	font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
    	font-size: 18px;
    	color: #808080;
    	text-decoration:none;
    }
    .pEditFontStyle[disabled]:hover
    {
    }
    
    /* スクリプトマネージャ */
    .toolKitStyle
    {
    	;
    	z-index: inherit;
    	left: 760px;
    	top: 530px;
    }
    
    /* 共通:表データ無し時 */
    .lblNotDataMessageStyle
    {
        font-family: Meiryo, Segoe UI, Tahoma, Arial, Verdana, sans-serif;
        font-size: 15px;
    	color:#7F7F7F;
    }
    
    @media screen and (max-device-width: 1024px) {
    
    	.td7
    	{
    		width: 109px;
    	}
    	.tabletwo
    	{
    		width: 955px;
    	}
    
    }
    div#divContextMenu
    {
        display:none;
        ;
    }
    ul.ulContextMenu
    {
        list-style: none;
        margin: 0px;
        padding: 3px;
    }
    div.cls_ModalProgressDummyBtns
    {
        border-top: 1px solid #CCCCCC;
        display: none;
    }
    /* 待機字背景 */
    .backProgressStyle
    {
    	background-color: #000000;
    	filter: alpha(opacity=0);
    	opacity: 0;
    }
    
    .com_text-align_right
    {
        text-align: right;
    }
    .com_text-align_left
    {
        text-align: left;
    }
    .com_text-align_center
    {
        text-align: center;
    }
    
    .waitProgress
    {
        ;
        z-index: 2;
        top: 343px;
        left: 45%;
        background-color: White;
    }



    以上です

    2013年6月13日 10:38
  •  どこの、メモリがリークしているのでしょうか。サーバーですか?クライアントですか?IE が落ちるということはクライアントのメモリがリークしているとお考えのようですが、そんなことはないはずです。Web.Config の設定は、サーバ側ですよね?切り分けをしましょう。

     また、変数に Nothing を代入しても解放にはなりません。メモリはGC が管理しており(だから「Managed」)、一見増え続けるようでも、GC が考える適切なタイミングで解放されます。開発者が気にしなければならないのはメモリ以外のリソースで、それは Nothing を代入しても解放されません。もっとも、メモリが解放されるタイミングで解放されるようにコード化されていることを期待しても良いでしょう(ただし、自分でコーディングしている場合は除く)。


    Jitta@わんくま同盟

    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月13日 13:39
  • To:Jitta様


    ご返答、ありがとうございます。


    説明不足があり、申し訳ございません。
    おっしゃる通り、メモリリークが発生しているのはクライアント側
    (IEを開いているエンドユーザ側)

    Web.Configの設定はサーバ側(IIS側)です。
    (WebConfigに対して触れたのは、
     Debugモードによりクライアントにメモリ不足エラーが起きる記事があった為です
     http://support.microsoft.com/kb/954830/ja の原因3)


    基本的にクライアント側で起こるメモリリークに対してのみ困っております。



    Nothing代入時に全ての参照が切れたと見なされ、GCが働く物だと思っていました...。
    そう言う訳ではなく適切なタイミングで行われるのですね。
    (勉強不足で申し訳ないです。)

    >>(ただし、自分でコーディングしている場合は除く)
    上記はソース上でGC処理(GC.Collect等)を行っているか?と言う事でよろしいでしょうか?
    だとすると、こちらのソースでは手動でのGC処理は行っていません。
    自動で行われるGC処理にのみ、頼っている状態です。



    >>開発者が気にしなければならないのはメモリ以外のリソースで、
     それは Nothing を代入しても解放されません。
    メモリの事にしか目を向けていなかったので、それ以外のリソースに関しては手つかずでした...。
    了解致しました、そちらの方を一度確認してみます。




    • 編集済み rokuroku 2013年6月14日 1:17
    2013年6月14日 1:07
  • UpdatePanel + Timer でJavascriptのメモリーリークが発生したことがあります。

    UpdatePanel Timer memory leak とかで検索するとちょこちょこ出てきます。

    実際にどのメソッドで発生しているかまでは突き止めていませんが、その時はUpdatePanelをやめてWCF+Knockoutで書き直しました。


    • 回答としてマーク rokuroku 2013年6月14日 5:05
    • 回答としてマークされていない rokuroku 2013年6月14日 5:06
    • 回答の候補に設定 星 睦美 2013年6月14日 6:02
    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月14日 2:19
  • > 的を絞ったソースを投稿させて頂きました。

    的を絞るのは結構ですが、問題が再現できないと話にならないです。私が使った時間は全くのムダだったようで、あんまりな話です。

    それから、最初の質問に「ASP.NET初心者の為」と書いてあったのですが、「現在作成している画面に近いソース」は初心者が書いたコードには見えませんけど。

    rokuroku さんが初心者らしいのは、Jitta さんへのレスで、サーバー側で起こることとクライアント側で起こることの区別がついてないのを見ると、そうなのかなとも思いますが。

    ひょっとして、初心者ではない他の人が書いたアプリの保守を、会社の上司などに言われて、初心者の質問者さんが作業しているというような状況なのですか? であれば、掲示板で他人に聞くような話ではなく、社内で解決すべきと思います。

    たぶん、原因は JavaScript のコードで循環参照があって、メモリの開放がうまくいってないからだと思います。

    Internet Explorer リーク パターンを理解して解決する
    http://msdn.microsoft.com/ja-jp/library/bb250448(v=vs.85).aspx

    調査のためのツールもあるようですので、ググって調べてください。

    • 回答としてマーク 星 睦美 2013年7月1日 5:37
    2013年6月14日 3:54
  • To:かるあ様


    ご返答ありがとうございます。

    『UpdatePanel Timer memory leak』で検索した所、
    確かにこの手のメモリリークが発生する記事が出てきました。
    (調査不足でした...申し訳ありません)


    WCFとKnockout.js、どちらも初めて知りました、
    ありがとうございます。
    WCFとKnockout.jsを使えばUpdatePanelの様な物が
    作成できると言う事ですね。
    早速調べて行きたいと思います。



    ※誤ってクリックしてしまい、回答としてマークをつけてしまいました
     ご迷惑をお掛けし、申し訳ございません。
    2013年6月14日 5:54
  • To:SurferOnWww様

    ご返答、ありがとうございます。


    >的を絞るのは結構ですが、問題が再現できないと話にならないです。
     私が使った時間は全くのムダだったようで、あんまりな話です。

    おっしゃる通りでございます。
    調査ツール等(sIEve-0.0.8.exe等)を使用して調べている内に
    表題の内容が問題ではないかと思い、掲示板に書き込んだ次第でした。
    始めから「現在作成している画面に近いソース」を提示しておくべきでした。
    本当に申し訳ございませんでした。


    >ひょっとして、初心者ではない他の人が書いたアプリの保守を、
     会社の上司などに言われて、初心者の質問者さんが作業しているというような状況なのですか?
     であれば、掲示板で他人に聞くような話ではなく、社内で解決すべきと思います。

    私自身、ASP.NET初心者です。
    初心者の状態で私が色々試行錯誤して作成しているのが
    「現在作成している画面」となります。

    こちらでもメモリリークしている原因を調査していたのですが
    行き詰ってしまい、掲示板の方々の知恵を貸していただければ、
    と思い書き込んだ次第でございます。



    >たぶん、原因は JavaScript のコードで循環参照があって、
     メモリの開放がうまくいってないからだと思います。

    JavaScriptの循環参照は一度調査していたのですが...まだ残っていると言う事ですね。
    ありがとうございます、循環参照について、再調査を行ってみます。
    (リンクを張って頂き、ありがとうございます。、循環参照についてしっかり学んでみます。)


    2013年6月14日 6:03
  • フォーラム オペレーターの星 睦美です。

    rokuroku さん、こんにちは

    こちらのスレッドを読んだ方にもアドバイスとして参考になりそうな返信に、今回は私のほうで[回答としてマーク]させていただきました。

    今後ともMSDN フォーラムをよろしくお願いします。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年7月1日 5:42