简单估算一下110,000*1k(我想你的一条记录恐怕不止占用1k的内存吧)=110m
110,000*2k=220m .................
这中间把数据有硬盘写入内存是要消耗时间的

解决方案 »

  1.   

    rainshow(要学习的那样多而时间却那么的少) 说的对:
    最好是每次取一定数量记录显示到页面,换页时接着往下取
      

  2.   

    下面是我后来改成在servlet中直接显示出信息的代码,请大家帮忙看看
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import java.sql.*;
    import edu.lsm.bean.*;
    import java.text.SimpleDateFormat;
    import javax.sql.DataSource;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;public class HttpDown extends HttpServlet {
      static final private String CONTENT_TYPE = "text/html; charset=GBK";
      ChangeCode changeCode=new ChangeCode();
      static final private int TDWIDTH=30;
      //Process the HTTP Get request
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
      }  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String page=request.getParameter("page");
        String sql;
        String sqlCount;
        String whereStr=null;
        if(page!=null&&page.length()>0)
        {
          sql=(String)session.getAttribute("sql");
          sqlCount=(String)session.getAttribute("sqlCount");
         }
        else
        {
        whereStr=" where protocol=\'HTTP_DOWN\'";
        sql="select fileName,sensitiveWord,AlarmID,Name,time,DstIp,URL from DealView";
        sqlCount="select count(AlarmID) as num from DealView"+whereStr;
        sql=sql+whereStr+" order by time desc";
        session.setAttribute("sql",sql);
        session.setAttribute("sqlCount",sqlCount);
    }
        int intPageSize=20;
        int intRowCount;
        int intPageCount=1;
        int intCurPage=1;
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out = response.getWriter();
        Connection conn=null;
        try {
    Context ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/cddd");
        conn=ds.getConnection();
        } 
        catch(Exception e) {
     out.println("不能获取数据库连接。");
     return;
    }

        Statement smt=null;
        ResultSet rs=null;
        try
        {
          smt=conn.createStatement();
          rs=smt.executeQuery(sqlCount);
          rs.next();
          intRowCount=rs.getInt(1);
          if(page!=null)
            intCurPage=Integer.parseInt(page);
          if(intCurPage<1)
            intCurPage=1;
          intPageCount = (intRowCount+intPageSize-1) / intPageSize; 
          if(intCurPage>intPageCount)
            intCurPage=intPageCount;
          rs.close();
          rs=smt.executeQuery(sql);
          for(int i=0;i<(intCurPage-1)*intPageSize;i++)
          {
            rs.next();
          }
          int k=0;
          out.println("<html>");
          out.print("<head><style>TD { FONT-SIZE: 9pt;  FONT-FAMILY: 宋体 }</style></head>");
          out.print("<body>");
          out.println("<table border=1 align=center>");
          out.println("<tr align=center><td>词</td><td>编号</td><td>名称</td><td>时间</td><td>IP</td><td>url</td></tr>");
          while(rs.next()&&k<intPageSize)
          {
            String hlink;
            hlink=rs.getString("fileName");
            hlink=(hlink==null)?"#":hlink.substring(3);        String value=rs.getString("sensitiveWord");
            value=(value==null)?"&nbsp;":value;
            out.print("<tr align=center><td><a href="+hlink+">"+value+"</td>");        value=rs.getString("AlarmID");
            value=(value==null)?"&nbsp;":value;
            out.print("<td>"+value+"</td>");                value=rs.getString("Name");
            value=(value==null)?"&nbsp;":value;
            out.print("<td>"+value+"</td>");
            
            String tmp=rs.getString("time");
            if(tmp==null||tmp.length()<4)
              tmp="";
            else
              tmp=tmp.substring(0,tmp.length()-4);
            out.print("<td>"+tmp+"</td>");        value=rs.getString("DstIP");
            value=(value==null)?"&nbsp;":value;
            out.print("<td>"+value+"</td>");        value=rs.getString("URL");
            value=(value==null)?"&nbsp;":value;
            String ST="";
    if(value==null)
       ST="&nbsp;";
     else
      {
        while(value.length()>TDWIDTH)
     {
      ST=ST+value.substring(0,TDWIDTH)+"<br>";
      value=value.substring(TDWIDTH);
     }
     if(value.length()>0)
       ST=ST+value;
     }
            out.print("<td align=left>"+ST+"</td></tr>");
             k++;
          }
          out.println("<tr><td colspan=6 align=center>");
          out.print("总记录数:"+intRowCount+"页次:"+intCurPage+"/"+intPageCount);
          if(intCurPage>1)
           out.print("<a href=HttpDown?page="+(intCurPage-1)+">上一页</a>&nbsp;&nbsp;");
           
          if(intPageCount>intCurPage)
          out.print("<a href=HttpDown?page="+(intCurPage+1)+">下一页</a>");
          
          out.print("</td></tr>");
          out.println("<table>");
          out.println("</body></html>");
        }
        catch(SQLException e)
        {
          getServletContext().log("HttpDown.java数据库操作出错.",e);
        }
        finally
        {
          try{
           rs.close();
            smt.close();
            conn.close();
          }
          catch(SQLException e)
          {
            getServletContext().log("HttpDown.java数据库关闭出错.");
          }
         }
      }
    }
      

  3.   

    我也有这样的问题,我用tomcat4.1.19,jdbc连接sql server2000数据量也不大,结果开始要等好大一会,感觉还没asp快,是不是一定要用连接池?