J'utilise ASP.NET MVC et Azure Table Storage dans la structure de développement local. Mon code est très lent pagination lorsque l'on travaille avec un grand ResultSet:Comment puis-je accélérer mon code de pagination dans ASP.NET MVC avec Azure?
var PageSize = 25;
var qResult2 = from c in svc.CreateQuery<SampleEntity>(sampleTableName)
where c.PartitionKey == "samplestring"
select c;
TableStorageDataServiceQuery<SampleEntity> tableStorageQuery =
new TableStorageDataServiceQuery<SampleEntity>
(qResult2 as DataServiceQuery<SampleEntity>);
var result = tableStorageQuery.ExecuteAllWithRetries()
.Skip((page - 1) * PageSize)
.Take(PageSize);
var numberOfEntities = tableStorageQuery.ExecuteAllWithRetries().Count
ViewData["TotalPages"] = (int)Math.Ceiling((double) numberOfEntities/PageSize);
ViewData["CurrentPage"] = page;
return View(result);
Le ViewData est utilisé par la vue de calculer les liens de pagination en utilisant le code du livre MVC Sanderson. Pour une table Azure avec plus de 1000 entités, c'est très lent. Pour commencer, "Count" prend beaucoup de temps pour calculer le nombre total d'entités. Si je lis correctement mon livre LINQ, c'est parce que la requête n'implémente pas ICollection. Le livre est "Pro LINQ" de Joseph Rattz.
Même si je règle "numberOfEntities" sur le total connu (par exemple 1500), la pagination est toujours lente pour les pages supérieures à 10. Je suppose que .Skip et/ou .Take sont lents. En outre, j'appelle deux fois ExecuteAllWithRetries(), et cela ne peut pas aider si en fait Azure est interrogé deux fois.
Quelle stratégie dois-je suivre pour effectuer une pagination sur de grands ensembles de données avec ASP.NET MVC et Azure?
EDIT: Je n'ai pas besoin de connaître le nombre total exact de pages.
Merci pour vos commentaires. Tu m'as convaincu que j'allais dans la mauvaise direction. J'ai maintenant implémenté la pagination comme indiqué sur http://blog.smarx.com/posts/paging-over-data-in-windows-azure-tables et j'en suis assez content. Pour mon application, je n'ai pas besoin d'afficher le nombre total de pages, donc je me suis débarrassé de "count" comme vous l'avez suggéré. Traiter les jetons de continuation était plus facile que je ne le pensais, et ils s'occupaient facilement de la fonctionnalité «sauter» et «prendre» que j'avais auparavant. Merci encore. – royco