2016-09-08 1 views
0

Je souhaite rendre cette action asynchrone, n'importe qui peut-être utile.Effectuer une action asynchrone pour améliorer les performances et éliminer les scintillements

[HttpGet] 
public ActionResult LoadAddressDetail(int? whId) 
{ 
    try 
    { 
     return Json(new 
     { 
      GridData = wareHouseMasterService.LoadAddressGrid(GetCommonProperty(), whId ?? 0, DataManager.CustomerType, DataManager.CustomerTypeCode.WAREHOUSE.ToString()), 
      Status = true 
     }, JsonRequestBehavior.AllowGet); 
    } 
    catch (Exception e) { this.loggerService.Error(e); return Json(false, JsonRequestBehavior.AllowGet); } 
} 

Depuis que je suis l'aide de trois méthodes HttpGet exécutées à une page charge et l'écran scintille Trois Times.So je dois le traitement parallèle.

+1

Rendre le 'ActionResult' asynchrone n'augmentera pas les performances, ni il n'éliminera le scintillement. –

Répondre

1

Vous ne savez pas exactement ce que vous cherchez ici. Faire une async d'action est aussi simple que d'ajouter le mot-clé async et retour Task<ActionResult>:

public async Task<ActionResult> LoadAddressDetail(int? whId) 

Bien sûr, alors, vous devez await quelque chose. La seule chose que je vois qui semble faire n'importe quel travail est wareHouseMasterService.LoadAddressGrid, mais vous n'avez fourni aucun détail sur ce que cela fait. D'une manière générale, vous devrez également rendre cette méthode asynchrone, ou en ajouter une version asynchrone. Ensuite, vous feriez simplement:

GridData = await wareHouseMasterService.LoadAddressGridAsync(...), 

Tout cela dit, il y a un gros problème à garder à l'esprit. Async, dans le contexte d'une requête web, n'est pas la même chose que le traitement parallèle, et cela ne fait rien non plus "plus vite". De plus, l'utilisation d'async a un impact mineur sur les performances, car il y a des frais généraux qui vont avec. En d'autres termes, le simple fait d'effectuer cette action en asynchrone ne sert en réalité aucun des objectifs que vous avez mentionnés. La véritable raison d'utiliser async est de permettre à votre serveur Web de gérer la charge plus efficacement. Lorsque le thread gérant la requête est dans un état d'attente, async permet au thread d'être renvoyé au pool pour renvoyer d'autres requêtes. Comme le nombre de threads pouvant être générés par un serveur Web peut augmenter, et donc le nombre de requêtes qu'il peut traiter simultanément, async vous offre une marge supplémentaire lorsque le serveur est sous charge. C'est à peu près tout. Cela dit, si vous essayez tout cela en développement, en utilisant IIS Express, il est important de réaliser que IIS Express est monothread. En d'autres termes, les requêtes sont mises en file d'attente et traitées en série, car les performances brutes ne sont pas un facteur réel de développement. Par conséquent, dans cette situation, vos trois requêtes AJAX sont traitées une à la fois, plutôt que parallèlement, car elles seraient probablement dans IIS complet, et cela peut être la source de ce que vous rencontrez. Async peut aider ici, mais pas nécessairement. Peu importe, c'est seulement un problème en développement. À court de tout cela, vous devez regarder votre JavaScript et vous assurer que vous faites les choses de manière optimisée, de sorte que les requêtes AJAX soient traitées efficacement. Il existe également des moyens de minimiser l'éclatement des problèmes de contenu non stylisés, en plus de simplement faire en sorte que tout se passe plus rapidement. Cependant, puisque vous n'avez posté aucun code à ce sujet, il n'y a pas grand chose à dire.