4 votes

<div>TextBox UpdateSourceTrigger = PropertyChanged - est-ce que cela affecte vraiment les performances?</div>

La documentation MSDN indique :

Les liaisons qui sont TwoWay ou OneWayToSource écoutent les changements dans la propriété cible et les propagent de nouveau vers la source. Cela est connu sous le nom de mise à jour de la source. Généralement, ces mises à jour se produisent chaque fois que la propriété cible change. C'est bien pour les cases à cocher et autres contrôles simples, mais ce n'est généralement pas approprié pour les champs de texte. La mise à jour après chaque frappe de touche peut diminuer les performances et elle prive l'utilisateur de la possibilité habituelle de revenir en arrière et corriger les erreurs de frappe avant de s'engager dans la nouvelle valeur. Par conséquent, la valeur par défaut d'UpdateSourceTrigger de la propriété Text est LostFocus et non PropertyChanged.

Je comprends que dans une situation où la mise à jour va directement vers une base de données, ou à travers un réseau, ou s'il s'agit d'une très grande quantité de données, cela pourrait effectivement diminuer les performances d'utiliser UpdateSourceTrigger = PropertyChanged sur les TextBoxes.

Mais si l'on met simplement à jour une simple DependencyProperty, ou une propriété d'un objet Entity Framework (avant de valider), le coup de performance ne serait-il pas négligeable ?

Je me demande, car je crée une application WPF qui suit l'état de l'objet en cours d'édition et optimise l'apparence du bouton Enregistrer en fonction des changements qui ont été apportés. Je pensais que la manière la plus simple de déterminer les changements serait de capturer les occurrences pertinentes de SourceUpdated au moment opportun. Cela fonctionne de manière optimale lorsque UpdateSourceTrigger = PropertyChanged pour les zones de texte, car l'utilisateur reçoit un retour instantané qu'il existe des changements "enregistrables".

1voto

devdigital Points 22495

Si cela convient à votre application et que vous ne constatez pas de dégradation significative des performances, alors il n'y a aucun problème à définir UpdateSourceTrigger sur PropertyChanged. En fait, si vous utilisez un framework MVVM tel que Caliburn.Micro, il définira cela comme paramètre par défaut pour tous les TextBoxes.

1voto

Robert Rossney Points 43767

La raison pour laquelle vous êtes averti de la dégradation des performances est que, pour la plupart, si vous avez besoin que la propriété source soit mise à jour à chaque frappe, c'est parce que vous avez besoin que quelque chose se produise lorsque la valeur de la propriété change. Après tout, si vous n'aviez pas besoin que ce "quelque chose" se produise, vous ne vous soucieriez pas vraiment de quand la propriété est mise à jour, du moment que cela finit par être le cas.

L'impact réel sur les performances dépend entièrement de ce "quelque chose". Et cela dépend entièrement de votre application. Si ce "quelque chose" est la mise en forme et l'affichage de la valeur dans un autre TextBlock, le faire à chaque frappe ne sera probablement pas perceptible. Si c'est filtrer un DataTable de 10 000 lignes et rafraîchir un DataGrid lié à cela, ce sera probablement le cas.

Alors, comment le savoir? Eh bien, il existe deux façons :

1) Comprenez votre application. Si vous savez ce que fait l'application lorsque vous mettez à jour la propriété source, vous pouvez prédire si le faire à chaque frappe posera problème ou non. Lorsque vous dites "Je suppose que je me demandais s'il pourrait sembler bon au début, mais peut réellement causer des problèmes dans certaines situations dont je n'ai pas conscience", ce que vous dites vraiment, c'est "Que se passe-t-il si je ne sais pas ce que fait mon application lorsque l'utilisateur appuie sur une touche?"

2) Si vous ne savez pas ce que fait votre application lorsque l'utilisateur appuie sur une touche, profilez-la.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X