Asp classic 响应缓冲区限制超出经典ASP错误

Asp classic 响应缓冲区限制超出经典ASP错误,asp-classic,Asp Classic,我做了一些关于响应缓冲区限制超出错误的研究,并且知道我应该在我的asp代码中使用Response.Flush或Response.Flush 我在代码中使用了这两种解决方案。在页面顶部,如下所示: <%@LANGUAGE="VBSCRIPT" %> <%Response.Buffer = false%> 但现在我面临的问题是,加载页面花费了太多的时间。那么还有其他解决办法吗 我不知道的唯一解决方案是增加缓冲区限制大小。在我的配置文件中,我没有任何与buff

我做了一些关于响应缓冲区限制超出错误的研究,并且知道我应该在我的asp代码中使用Response.Flush或Response.Flush

我在代码中使用了这两种解决方案。在页面顶部,如下所示:

   <%@LANGUAGE="VBSCRIPT" %> 
   <%Response.Buffer = false%> 
但现在我面临的问题是,加载页面花费了太多的时间。那么还有其他解决办法吗

我不知道的唯一解决方案是增加缓冲区限制大小。在我的配置文件中,我没有任何与bufferesize相关的代码

更新:代码示例:

  Response.Flush()      
  rsCustomer.MoveNext

这是我正在使用的代码示例。调用查询后,我将结果绑定到表。

您不能同时使用这两个。response.buffer必须为true才能使用response.flush。考虑到MSDN如何声明它将导致运行时错误,我甚至不知道为什么它会起作用

此外,不应在循环中使用response.flush。这意味着每次循环结束时,您都会向浏览器发送信息。这将导致对浏览器的推送次数过多

编辑:Lankymart在评论中提到使用循环的mod变量更频繁地刷新记录。为了便于操作,将其添加到我的答案中。这就是您将要做的:

<%
  sSQL = "SELECT "
  sSQL = sSQL & " tbl.[Customer]"
  sSQL = sSQL & " FROM tblCart"sSQL = sSQL & " WHERE"
  sSQL = sSQL & "  tbl.[Name] = 'Test'
  counter = 0
  rs.Open sSql, ConnectionString
%>
table border="0" cellspacing="0" cellpadding="0" width="100%">
  <tr>
    <td style="padding: 2px;" class="bgmed">
      <strong>Customer</strong>
    </td>
  </tr>
  <%
  Do While Not rs.EoF
    counter = counter + 1
  %>
    <tr>
      <td>
        <%= rs.Fields("Customer").value %>
      </td>
    </tr>
  <%
    if counter mod 10 = 0 then
      Response.Flush
    End If
    rs.MoveNext
  Loop
  %>
</table>

在dreamweaver中,我喜欢这样做,这样就不会产生抖动

 </tr>
 <%dim bgcolor, counter
 bgcolor = "#E6E8FF"
 counter = 1 %>
 <% 
 While ((Repeat1__numRows <> 0) AND (NOT rsSearch.EOF)) 
 %>
 <% if counter mod 10 = 0 then
       Response.Flush
      End If %>
      <tr bgcolor="<%=bgcolor%>" onMouseOver="changeto(event, '#ECE9D8')" onMouseOut="changeback(event, '<%=bgcolor%>')">
     <td align="left" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("NAME").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("ID").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("WORK_AREA").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("VIP_LOGIN").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("ACTIVE").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%= DoDateTime((rsSearch.Fields.Item("LAST_LOGIN_DATE").Value), 1, 1033) %></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("EMAIL_ADDRESS").Value)%></td>
   </tr>
   <%counter = counter + 1%>
   <% 
   Repeat1__index=Repeat1__index+1
   Repeat1__numRows=Repeat1__numRows-1
   rsSearch.MoveNext()
 Wend
 %>
 </table>
 <br />

你必须向我们展示你在循环中做了什么。这将是整个过程中的另一个处理过程导致问题。@Paul我的代码非常长。所以发布了示例代码。请仔细研究一下。不要回应。在循环的每次迭代中刷新使用Mod来分解它,这样它只会每隔这么多记录刷新一次。我肯定我几天前在一篇类似的帖子上写的,是你吗?现在在任何地方都找不到那篇文章,你删除了它并重新发布了吗?@Lankymart Hi你能告诉我如何使用Mod作为我的代码吗??我不是那个发帖问这个问题的人。对不起,迟了回复。嗨,你说得对。现在我使用response.buffer=true。但正如你所说,我应该在什么时候使用response.flush。现在我的页面加载速度非常慢。通常在重要的菜单和站点导航完成后使用。其思想是允许用户看到页面存在。在你的情况下,我可能在你的循环之前执行它。如果你有问题之后,考虑以某种方式分页。您在页面上发布了多少个结果?我根据日期在表中显示了大约100到200个结果。但当我加载页面时,我选择了大约2000条记录的所有记录。100条结果并没有那么糟糕,但200条正在推送它。这还取决于列的方式,以及列是否有大的文本块或blob项。
 </tr>
 <%dim bgcolor, counter
 bgcolor = "#E6E8FF"
 counter = 1 %>
 <% 
 While ((Repeat1__numRows <> 0) AND (NOT rsSearch.EOF)) 
 %>
 <% if counter mod 10 = 0 then
       Response.Flush
      End If %>
      <tr bgcolor="<%=bgcolor%>" onMouseOver="changeto(event, '#ECE9D8')" onMouseOut="changeback(event, '<%=bgcolor%>')">
     <td align="left" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("NAME").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("ID").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("WORK_AREA").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("VIP_LOGIN").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("ACTIVE").Value)%></td>
     <td align="center" valign="middle" nowrap="nowrap"><%= DoDateTime((rsSearch.Fields.Item("LAST_LOGIN_DATE").Value), 1, 1033) %></td>
     <td align="center" valign="middle" nowrap="nowrap"><%=(rsSearch.Fields.Item("EMAIL_ADDRESS").Value)%></td>
   </tr>
   <%counter = counter + 1%>
   <% 
   Repeat1__index=Repeat1__index+1
   Repeat1__numRows=Repeat1__numRows-1
   rsSearch.MoveNext()
 Wend
 %>
 </table>
 <br />