2010-09-25 5 views
1

J'ai 2 classes différentes que je suis en train de tester pour envoyer des fichiers au navigateur. La première est à http://pastebin.org/1187259 utilise des en-têtes spécifiques Range afin de fournir la repriseasp.net C# envoi de fichiers binaires à des problèmes de vitesse client

La deuxième est à http://pastebin.org/1187454 utilise morceau lecture pour envoyer des fichiers volumineux.
Les deux fonctionnent bien avec un différent. Le premier est beaucoup plus lent que le second dans le sens de la vitesse de téléchargement. Avec le premier je ne peux pas passer plus de 80KB/s avec le second je peux obtenir aussi vite que possible.

J'ai fait peu de tests et le résultat était le même. Est-ce une illusion ou y a-t-il quelque chose sur le premier qui ralentit la vitesse de téléchargement?

J'ai également remarqué que le premier semble bloquer d'autres demandes. Par exemple, si je demande un fichier au serveur avec le premier serveur, je ne répondrai pas à mon autre requête avant la fin du téléchargement. Même si je demande une page différente. Cela ne fonctionne pas si j'ouvre différentes sessions à partir de différents navigateurs.

Merci.

Répondre

1

Enfin! J'ai réussi à résoudre le problème en ajoutant EnableSessionState = "ReadOnly" à la page de téléchargement.

Voir http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Session_State

« Utilisez l'attribut ReadOnly Lorsque vous pouvez

Pour les pages qui ne nécessitent l'accès en lecture aux données de session, d'envisager la définition EnableSessionState à ReadOnly.

Pourquoi

demandes Page l'utilisation de l'état de session en interne utilise un objet ReaderWriterLock pour gérer les données de session, ce qui permet à plusieurs lectures de se produire en même temps lorsqu'aucun verrou n'est maintenu. Pour mettre à jour l'état de la session, toutes les demandes de lecture sont bloquées. Normalement, deux appels sont effectués dans la base de données pour chaque requête. Le premier appel se connecte à la base de données, marque la session comme verrouillée et exécute la page. Le second appel écrit les modifications et déverrouille la session. En définissant EnableSessionState sur ReadOnly, vous évitez le blocage et vous envoyez moins d'appels à la base de données, ce qui améliore les performances. "

Questions connexes