2010-09-28 13 views
2

Je génère des rapports à la volée en utilisant l'excellent outil SpreadSheetGear. Au début, les choses allaient bien parce que les rapports étaient simples et faits en moins d'une seconde. Maintenant, je suis à des rapports plus complexes et ils prennent environ 30 secondes jusqu'à 1 minute. Ce n'est pas un problème, nous jetons juste une image d'activité et laissons l'utilisateur attendre, bien par nous.Tâche longue ASP.NET se bloque d'autres pages?

Le problème que j'ai trouvé est lorsque deux utilisateurs viennent sur le site.

  1. utilisateur 1 arrive sur le site
  2. utilisateur 1 exécute un rapport qui prend 30 secondes.
  3. L'utilisateur 2 arrive sur le site
  4. L'utilisateur 2 attend jusqu'à ce que l'utilisateur 1 ait terminé le rapport, puis la page se charge. Le rapport en cours d'exécution pour l'utilisateur 1 raccroche le site jusqu'à ce qu'il soit terminé.

Que se passe-t-il et comment puis-je résoudre ce problème?

+0

On dirait que vos rapports sont traités par un seul thread. Il est difficile de dire pourquoi, vous devriez poster quelques détails de mise en œuvre. – Restuta

+0

Le code de la page: http://pastebin.com/GSdT7cN6 La page derrière le code http://pastebin.com/m2FAdf1Z Il retourne effectivement le fichier xlsx dans la réponse qui est ce que nous voulons. –

Répondre

2

Vous ne partagez pas les détails sur ce à quoi ressemble le code, mais il semble que vous devriez chercher à créer asynchronous pages. En bref, l'astuce consiste à retirer du travail lourd les threads du pool de threads, qui sert à traiter les demandes de pages. En déplaçant le travail lourd vers d'autres threads, le thread du pool de threads peut être renvoyé rapidement au pool afin de servir d'autres demandes entrantes.

Ensuite, il s'agit plus de la quantité de travail que la machine produisant les rapports peut effectuer.

+0

Je pensais que chaque page sortirait d'un fil dans la piscine. Nous aurons des utilisateurs simultanés mais je doute que ce soit plus de 15 à la fois. Le serveur est à peine utilisé, donc j'essaie d'exécuter les rapports en direct. –

+0

J'ai effectivement regardé des pages asynchrones mais le code sur cette page a exactement le même problème. Si j'exécute le code localement et charge deux pages avec ce code exact, si la première page est en cours d'exécution le second ne chargera pas jusqu'à ce que le premier est fait. –

0

À quelle fréquence les données du rapport changent-elles? Si, par exemple, vous utilisiez SQL Server, vous pourriez avoir une procédure stockée pour créer les données du rapport dans une table et faire exécuter la procédure stockée en tant que travail de l'Agent SQL Server. Définissez le travail à exécuter fréquemment car vous souhaitez que les données soient mises à jour. Cela devrait considérablement accélérer vos pages.

Vous avez peut-être les deux demandes sur le même sujet?

+0

Certaines données changent tous les mois, certaines quotidiennement, d'autres à la minute. Nous utilisons l'outil SSG pour extraire les rapports Excel car c'est ce que veulent nos utilisateurs. –