Question

Quand mon C #, WPF UI démarre, l'un des onglets appelle ce code lors du chargement. Les données les plus récentes sont affichées avec 11-Feb-2012, même si il y a des documents InstallationSummary pour 15-Feb-2012. Quand je clique sur le bouton de rafraîchissement, ce même code est appelé, mais cette fois les résultats les plus récents sont affichés. Comment le même produire un code deux résultats différents?

IQueryable<EntityBase> installationSummaries =
  QueryAndSetEtags(session => session.Query<InstallationSummary>()
  .Include(x => x.ApplicationServerId)
  .Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
  .Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
  .OrderByDescending(summary => summary.InstallationStart)
  .Take(numberToRetrieve));

Note: Je vais avoir exactement le même problème avec une autre requête. Il semble que si je ne l'ai pas interrogé dans un certain temps, je reçois les résultats incorrects. Si je fais une recherche à nouveau juste après que je l'ai fait, j'obtenir les bons résultats. Je me demande si je dois créer un index. Il y a plus de 10 000 documents InstallationSummary, et la performance est très bien. Il est la précision que je vais avoir du mal avec.

Était-ce utile?

La solution

Sons comme un problème d'index rassis. Essayez d'ajouter cette ligne et voir si cela aide

.Customize(x => x.WaitForNonStaleResultsAsOnNow())

Mise à jour: Il est préférable d'utiliser WaitForNonStaleResultsAsOnNow () que WaitForNonStaleResults ()

Edit: Pourquoi est-ce ? La raison en est, que votre requête va créer un index temporaire qui sera supprimé automatiquement après un certain temps d'inactivité. De plus, ils ne survivront pas à un redémarrage de RavenDB. Maintenant, vous avez quelques options:

  • promouvoir l'index à être permanent à l'aide du studio de gestion

  • créer un index dans votre application et utiliser cet index lors de la recherche

  • attente pour le corbeau à l'auto elle-même optimiser et promouvoir l'index automatiquement (cela ne se produira si la requête sera exécutée assez souvent, ce qui semble peu probable dans votre cas)

  • utiliser les .WaitForNonStaleResuls () l'option comme indiqué ci-dessus (ce qui est pire car elle peut avoir un impact très négatif sur les performances des applications et il n'y a pas besoin parce que les autres options sont beaucoup mieux )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top