2010-12-11 70 views
0

Je suis dans une situation où je dois suivre les PREMIERS changements appliqués à un champ. Cette chose s'applique à "certains" (10 si je ne me trompe pas) des champs d'une structure que je dois être aussi efficace que possible (c'est une structure qui sera utilisée intensivement pour communiquer des informations entre threads pour rendre/mettre à jour des données; un message passant struct essentiellement)..NET Compact Framework, Problèmes de performances des propriétés et suivi de la modification du champ

Dans ce cas, je parle de cadre compact de xbox, j'ai heared que les propriétés ont des problèmes de performance, car ils ne sont pas inline, donc ma question est:

Quelle est la meilleure façon de faire face à cette situation ?

2 Idées:

1) je garder une trace du premier changement fait à un champ, donc j'utiliser une propriété qui établira automatiquement un champ de bits à 1 à dire: « Je suis modifié!" (ce champ de bits fait partie d'un seul int, donc c'est seulement un surcoût de 4 octets), mais je perdrai tous les autres appels à cette propriété car ils changeront simplement la valeur, car le bit est déjà défini (jusqu'à la prochaine image obviusly)

2) Je manuellement garder une trace du changement du champ (qui sera rendu public si), réglant le bit avec mes propres mains (plus de possibilités d'erreur, mais Optimized)

Merci pour tout suggestion

Répondre

0

Comme rsenna l'a déclaré, la seule solution que j'ai trouvé est de rester avec les champs publics ou de travailler avec des fonctions sans trop se soucier de la lenteur de l'exécution. Il n'y a pas de solution pour cela

1

La seule façon "améliorée" de faire (1) que je peux imaginer serait d'utiliser des délégués - garder deux versions de la code de jeu de propriétés, celui qui définit le champ de bits et celui qui ne le fait pas. Ensuite, faites en sorte que la propriété utilise la deuxième version après que le bit a été défini. De cette façon, vous éviterez le surdébit de toujours définir le champ de bits (mais obtiendrez un temps de traitement plus petit pour faire un appel de délégué).

+0

Solution intéressante, je vais la référencer –

+0

J'ai benchmarké la solution mais un simple appel de propriété est 3 fois plus lent qu'une utilisation publique sur le terrain ... et je ne suis pas sur le framework compact mais sur le .net 4.0 (bien la différence est de 649 ticks contre 274), sur Xbox360 c'est 3,4 fois plus lent: 7734 ticks contre 2265 ... des chiffres assez élevés par rapport à l'ordinateur! –

+0

Ceci n'est pas directement impliqué dans la question, mais les opérateurs personnalisés sont un désastre de performance, si vous additionnez 2 vecteurs avec des opérateurs surchargés au lieu de sommer leur X et Y, vous perdrez 100 performances ... quoi de neuf? ! –