2011-03-30 1 views
3

Cela s'applique .NET. Je cherche à écrire une application de cartographie spatiale. Il y aura plusieurs polygones en mémoire à la fois (de l'ordre de 30 à 50 polygones). chaque polgon a une collection de points LatLong. la collection peut aller de 10 à 200 par polygone. Cependant, il y a beaucoup de calculs qui seront faits en utilisant les points, c'est pourquoi (pour la performance) je veux faire du LatLong une structure. Cependant, je suis fatigué de faire le grand nombre de LatLong qui sera en mémoire. Toute idée à ce sujet sera appréciée. Pour récapituler: Je veux savoir si je shold faire un LatLong une structure parce que je veux des performances sur le calcul, ou une classe en raison du nombre de latLongs qui seront en mémoire à un.struct vs class

+0

Départ: http://stackoverflow.com/questions/521298/when-to-use-struct-in-c Vous pouvez répondre à votre question là. – Marc

+2

Comme d'habitude, vous devriez en faire une struct * si vous voulez une sémantique de valeur *. Après avoir pris cette décision (voulez-vous une valeur ou une sémantique de référence?), Mesurez. Puis demandez-vous: "Cette performance est-elle assez bonne?" –

+0

Ceci est une FAQ absolue. Apprenez à chercher ou essayez de restreindre la question au détail spécifique de la question avec laquelle vous voulez des conseils supplémentaires. (PS: écrire un anglais clair aidera beaucoup aussi) – sehe

Répondre

10

La réponse à cette question dépendra de vos priorités de ressources, de la classe/structure et de la façon dont vous l'utilisez. Je vous suggère de déterminer quelles sont vos ressources de mémoire/performance, puis de tester les deux implémentations pour voir comment elles s'intègrent dans ces paramètres de ressources. Si possible, essayez de tester les opérations réelles que vous prévoyez d'effectuer.

MSDN also offers some good guidance on when and when not to use structs. de l'article:

Ne pas définir une structure à moins que le type a toutes les caractéristiques suivantes:

  • Il représente logiquement une valeur unique, semblable à des types primitifs (entier, double, etc.).
  • Il a une taille d'instance inférieure à 16 octets.
  • Il est immuable.
  • Il n'aura pas à être encadré fréquemment.
1

Que vous deviez faire l'un ou l'autre dépend entièrement de votre application. Je voudrais essayer les deux voies et voir laquelle est la plus rapide. C'est ce que je fais quand j'ai cette question.

0

Faire deux implémentations de test avec un calcul représentatif, une avec une struct et une avec une classe, et mesurez, je répète mesure (!!!) la performance. Selon mon expérience, il est très probable que tout préjugé au sujet de la performance attendue se révèle totalement faux dans de telles situations.

+0

D'accord, mais il vaudra beaucoup mieux utiliser les vrais calculs réels. Vous devez mesurer la performance de votre système, pas celle d'un système qui peut ou non avoir les mêmes caractéristiques de performance. Il n'est pas toujours facile de décider ce qu'est un calcul représentatif. –

+0

Je suis d'accord, en utilisant le système réel apporterait les meilleurs résultats. D'un autre côté, lorsque les systèmes réels auront plus de 50 000 lignes de code, une mauvaise décision de conception ne sera pas fixée aussi facilement qu'au moment où le système n'avait que 500 lignes de code. –

1

En général, si vous allez avoir une grande collection d'objets simples où les données contenues dans celles-ci ne changera pas une fois instancié (vos latLongs sonnent comme ils sont essentiellement des conteneurs de données), puis J'utiliserais personnellement une structure immuable.

Questions connexes