none
ASP.NET读取SQL到GridView占内存过多怎么办!? RRS feed

  • 问题

  • 网页实现读取SQL到GridView,然后让其滚动。挂在IIS,一个浏览器选项卡竟然有300MB~400MB内存占用。可是页面里还要放好几个这样的模块!高手帮忙看下代码哪里写的有问题,先谢过!


    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Linq" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
        //绑定数据到GridView
        public void getPortInfo()
        {
            string connectionString = ConfigurationManager.ConnectionStrings["ConStr"].ToString();
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            con.Open();
            string strsql = "select a.shipname as c1,b.porttype as c2,b.portposition as c3,b.reporttime as c4 from ShipStaticInfo a,ShipDynInfo b where b.PortFlag=0 order by b.reporttime desc";
    
            SqlDataAdapter sda = new SqlDataAdapter(strsql, con);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            this.g.DataSource = ds;
            this.g.DataBind();
            con.Close();
            //UpdatePanel1.Update();
        }
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
            getPortInfo();
        }
    
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <style type="text/css">
            .blk_02
            {
                margin-top: 4px;
            }
            .blk_02 .table_title table
            {
                border: none;
                border-collapse: collapse;
                background: #fbeceb;
                color: #ff6d81;
            }
            .blk_02 .table_title table th
            {
                font-family: 微软雅黑;
                font-size: 12px;
                border-right: 1px solid #f39aac;
                height: 24px;
                font-weight: bold;
                text-align: center;
            }
            .blk_02 .table_title table th.grid_th4
            {
                border-right: none;
            }
            .blk_02 .table_data
            {
            /*设置Div滚动条*/
                height: 131px;
                overflow: auto;
            }
            .blk_02 .table_data table
            {
                border: none;
                border-collapse: collapse;
            }
            .blk_02 .table_data table td
            {
                border-collapse: collapse;
                font-family: 微软雅黑;
                font-size: 12px;
                border-right: 1px dashed #f39aac;
                border-bottom: 1px dashed #f39aac;
                height: 24px;
                font-weight: normal;
                text-align: center;
            }
            .blk_02 .table_data table td.grid_col4
            {
                border-right: none;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div class="blk_02" id="chg">
            <div class="table_title">
                <table width="585" cellspacing="0">
                    <tbody>
                        <tr>
                            <th width="20%">
                                列1
                            </th>
                            <th width="20%">
                                列2
                            </th>
                            <th width="30%">
                                列3
                            </th>
                            <th class="grid_th4" width="30%">
                                列4
                            </th>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div class="table_data" id="demo">
                <div id="demo1">
                    <asp:GridView ID="g" runat="server" AutoGenerateColumns="false" ShowHeader="false"
                        CellPadding="3" Width="585" GridLines="None" CssClass="gridview_g">
                        <Columns>
                            <asp:TemplateField ItemStyle-Width="20%">
                                <ItemTemplate>
                                    <%#Eval("c1")%>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField ItemStyle-Width="20%">
                                <ItemTemplate>
                                    <%#Eval("c2") %>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField ItemStyle-Width="30%">
                                <ItemTemplate>
                                    <%#Eval("c3") %>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField ItemStyle-CssClass="grid_col4" ItemStyle-Width="30%">
                                <ItemTemplate>
                                    <%#Eval("c4") %>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </div>
            </div>
        </div>
    
    <!--Div滚动代码-->
        <script type="text/javascript">
            var speed = 30
            function Marquee() {
                if (document.getElementById("demo").scrollTop >= document.getElementById("demo1").offsetHeight - document.getElementById("demo").offsetHeight) {
                    document.getElementById("demo").scrollTop = 0;
                } else {
                    document.getElementById("demo").scrollTop++;
                }
            }
            var MyMar = setInterval(Marquee, speed)
            document.getElementById("demo").onmouseover = function () { clearInterval(MyMar) }
            document.getElementById("demo").onmouseout = function () { MyMar = setInterval(Marquee, speed) }  
        </script>
        </form>
    </body>
    </html>
    

    2014年6月25日 9:57

答案

  • 你好,

    从代码中,看不出有什么异常,

    不知道你从数据库中取出了是多大的数据量,有可能是因为数据过多,导致内存消耗过多

    • 已标记为答案 Wving5 2014年6月26日 3:44
    2014年6月26日 2:41

全部回复

  • 你好,

    从代码中,看不出有什么异常,

    不知道你从数据库中取出了是多大的数据量,有可能是因为数据过多,导致内存消耗过多

    • 已标记为答案 Wving5 2014年6月26日 3:44
    2014年6月26日 2:41
  • 你好,

    从代码中,看不出有什么异常,

    不知道你从数据库中取出了是多大的数据量,有可能是因为数据过多,导致内存消耗过多

    额,说的对!非常感谢!

    //事故原因:Sql查询写错…忘了判断a.shipID=b.shipID,导致查询结果从几十条变成几万条…

    //另:不知为何IE不执行上面的JS滚动代码…试了下<script></script>写什么都不执行……囧


    2014年6月26日 3:46