oct

04

TransmitFile vs WriteFile en asp.net et c#

Posted by : oalessandri | On : 4 octobre 2011

 

L’utilisation de WriteFile pour l’enregistrement d’un fichier sur le serveur ou le téléchargement d’un fichier via une page web pose apparemment des problèmes lorsque le fichier est trop volumineux et que la connexion du client n’a pas un débit important.

WriteFile mets les données du fichier transmit au client dans un buffer (en mémoire) géré par le processus w3wp.exe, utilisé pour le site web. Dans ce cas un seul processus gère le site web et une limite de mémoire avant recyclage a été configurée pour éviter les saturations de mémoire et ainsi recycler régulièrement le processus. Mais cette configuration couplée à WriteFile coupe la connexion lors du téléchargement car la mémoire dépasse  la quantité de mémoire maximale autorisée. Et il est impossible au navigateur client de se recnnecter au serveur sur le même thread qui était occupé à transmettre le fichier

Pour éviter cela 2 solutions :

  1. augmenter la mémoire pour le processus w3wp.exe
  2. utiliser TransmitFile qui envoi directement les données du fichier et ne mets rien en mémoire.

Si d’autres personnes ont des informations complémentaire à ce sujet ils seront les bienvenues.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partly powered by CleverPlugins.com