web-dev-qa-db-fra.com

Limite de mémoire tampon de réponse dépassée

J'exécute une requête simple pour extraire des données de ma base de données et les afficher. Je reçois une erreur qui dit Response Buffer Limit Exceeded

Erreur: Erreur d'objet de réponse 'ASP 0251: 80004005'
Limite de mémoire tampon de réponse dépassée
/abc/test_maintenanceDetail.asp, ligne 0
L'exécution de la page ASP a entraîné le dépassement de la limite configurée par le tampon de réponse. 

J'ai aussi essayé Response.flush dans ma boucle et j'utilise aussi response.buffer = false en haut de la page, mais je ne reçois toujours pas de données.

Ma base de données contient 5600 enregistrements pour cela, donnez-moi s'il vous plaît quelques étapes ou code pour résoudre le problème.

37
Samir

Je sais que c'est très tard, mais pour quiconque rencontre ce problème: si vous utilisez une boucle quelconque (dans mon cas, un Do-While) pour afficher les données, assurez-vous de passer au prochain enregistrement (dans mon cas, un rs.MoveNext).

46
SMM

Le support de Microsoft dit ceci

http://support.Microsoft.com/kb/925764

mais sur l'interface graphique, c'est plus facile:

  • Dans le gestionnaire de serveur, cliquez sur ASP.
  • Changer la limite de mémoire tampon de 4 Mo à 64 Mo.
  • Appliquer et redémarrer.
42
cmujica

Cela s'explique par le fait que la mise en mémoire tampon est activée par défaut et que IIS 6 ne peut pas gérer la réponse volumineuse. 

En ASP classique, en haut de votre page, après <%@Language="VBScript"%>, ajoutez: <%Response.Buffer = False%>

Dans ASP.NET, vous ajouteriez Buffer="False" à votre directive Page. Par exemple: <%@Page Language="C#" Buffer="False"%>

24
Muhammad Naveed

Je suis confronté au même type de problème, ma version IIS est 8.5. L'augmentation du Response Buffering Limit sous le ASP -> Limit Properties a résolu le problème.

  1. Dans IIS 8.5, sélectionnez votre projet, vous pouvez voir les options dans le côté droit. Dans ce que sous IIS, vous pouvez voir l’option ASP.

 ASP option

  1. Dans la fenêtre d'options, augmentez le Response Buffering Limit à 40194304 (environ 40 Mo).

 Increase buffer limit

  1. Pour vous éloigner de l'option, en haut à droite, vous pouvez voir le menu Actions, Sélectionnez Appliquer. Cela a résolu mon problème.

 Apply settings

8
Arulkumar

Si vous n'êtes pas autorisé à modifier la limite de la mémoire tampon au niveau du serveur, vous devrez utiliser la méthode <% Response.Buffer = False%>.

CEPENDANT, si vous obtenez toujours cette erreur et que vous avez un grand tableau sur la page, le coupable peut être le tableau lui-même. De par leur conception, certaines versions d'Internet Explorer mettent tout le contenu en mémoire tampon avant qu'il ne soit restitué à la page. Ainsi, même si vous indiquez à la page de ne pas mettre le contenu en mémoire tampon, l'élément de table peut être mis en mémoire tampon et provoquer cette erreur.

Certaines solutions alternatives peuvent consister à paginer les résultats de la table, mais si vous devez afficher la table entière et qu'elle compte des milliers de lignes, jetez cette ligne de code au milieu de la boucle de génération de table: <% Response.Flush%>. Pour des raisons de rapidité, vous pouvez également envisager d’ajouter un compteur de base afin que la purge n’ait lieu que toutes les 25 ou 100 lignes environ. 

Inconvénients de ne pas mettre en tampon la sortie:

  1. ralentissement de la charge globale de la page
  2. les tables et les colonnes vont ajuster leur largeur au fur et à mesure que le contenu est rempli (la table semble bouger)
  3. Les utilisateurs pourront cliquer sur les liens et interagir avec la page avant qu'elle ne soit entièrement chargée. Donc, si vous avez du javascript au bas de la page, vous pouvez le déplacer en haut pour vous assurer qu'il est chargé avant que certains de vos utilisateurs les plus rapides ne cliquent dessus.

Consultez cet article de la Base de connaissances pour plus d'informations http://support.Microsoft.com/kb/925764

J'espère que cela pourra aider.

5
stevepowell2000

Merci beaucoup! <% Response.Buffer = False%> a fonctionné comme un charme! Mon tableau asp/HTML qui renvoyait une page vierge contenant environ 2 700 enregistrements. Les lignes de débogage suivantes ont contribué à exposer le problème de mise en mémoire tampon: j'ai remplacé la boucle Do While comme suit et joué avec mes nombres limites pour voir ce qui se passait: 

Remplacer  

Ne pas rs.EOF

'etc .... votre bloc de code qui écrit les lignes de la table

rs.moveNext 

Loop

avec  

Faire en comptant <2500

si rs.EOF alors recomptage = 2501 

'etc .... votre bloc de code qui écrit les lignes de la table

rs.moveNext 

Loop

response.write "recount =" & recount

levez ou abaissez les 2500 et 2501 pour voir s’il s’agit d’un problème de mémoire tampon. pour mon jeu d’enregistrements, j’ai pu constater que le retour de page vierge, tableau vide, se passait à environ 2700 enregistrements, bonne chance à tous et merci encore de résoudre ce problème! Une si simple solution géniale!

5
Kalaine

Vous pouvez augmenter la limite comme suit:

  1. Arrêtez IIS.
  2. Recherchez le fichier% WinDir%\System32\Inetsrv\Metabase.xml
  3. Modifiez la valeur AspBufferingLimit. La valeur par défaut est 4194304, ce qui correspond à environ 4 Mo . Le passage à 20 Mo (20971520).
  4. Redémarrez IIS.
3
shana

Une autre réponse au même message d'erreur (cela résout simplement mon problème) est que le lecteur système manquait d'espace disque. Ce qui signifie environ 700kb gratuitement. La suppression de nombreux éléments inutilisés sur ce très vieux serveur, puis le redémarrage de IIS et du site Web (probablement uniquement IIS était nécessaire) font disparaître le problème.

Je suis sûr que les autres réponses sont plus utiles pour la plupart des gens, mais pour une solution rapide, assurez-vous simplement que le lecteur système dispose d'un espace disponible.

1
Matt Dawdy

Dans mon cas, je viens d'écrire cette ligne avant rs.Open .....

Response.flush

rs.Open query, conn

0
Edison Neza

J'ai corrigé l'erreur 'ASP 0251: 80004005' Response Buffer Limit comme suit:

Pour augmenter la limite de mise en mémoire tampon dans IIS 6, procédez comme suit:

Cliquez sur Démarrer, sur Exécuter, tapez cmd, puis cliquez sur OK . Tapez la commande suivante, puis appuyez sur Entrée: Cd/d% systemdrive%\inetpub\adminscripts appuyez sur Entrée: cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize Remarque LimitSize représente la taille de la limite de mise en mémoire tampon en octets. Par exemple, le nombre 67108864 définit la taille de la limite de mise en mémoire tampon sur 64 Mo . Pour confirmer que la limite de la mémoire tampon est définie correctement, procédez comme suit:

Cliquez sur Démarrer, sur Exécuter, tapez cmd, puis cliquez sur OK . Tapez la commande suivante, puis appuyez sur Entrée: Cd/d% systemdrive%\inetpub\adminscripts appuyez sur ENTREE: cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

fait référence à https://support.Microsoft.com/en-us/kb/944886

0
Blair

Si vous cherchez la raison et que vous ne voulez pas vous battre contre les paramètres du système, voici deux situations majeures que j'ai rencontrées:

  1. Vous pouvez avoir une boucle infinie sans next ou recordest.movenext
  2. Vos données textuelles sont très volumineuses mais vous pensez que ce n’est pas le cas! La raison habituelle de cette situation est de copier-coller une image de Microsoft Word directement dans l'éditeur afin que le serveur traduise l'image en objets de données et l'enregistre dans votre champ de texte. Cela peut facilement occuper les ressources de la base de données et causer un problème de mémoire tampon lorsque vous appelez à nouveau les données.
0
Ali Sheikhpour