42 votes

Les fonctions statiques C # fonctionnent-elles mieux que les fonctions non statiques, au-delà de l'utilisation réduite de la mémoire?

Je suppose qu' public ou private static de la réalisation des objectifs ont réduit l'utilisation de la mémoire, en raison du fait qu'il n'existe qu'une seule copie de la cible statique dans la mémoire.

Il semble que parce qu'une méthode statique qui peut rendre la méthode un point potentiel pour la poursuite de l'optimisation par le CLR compilateur au-delà de ce qui est possible avec un non-statique de la fonction. Juste un fragile théorie si, donc je viens vous demander à tous.

N' static public ou private méthodes fournissent une augmentation de l'avantage de performance au-delà de réduction de l'utilisation de la mémoire?

(Note: je ne suis pas intéressé par les réponses que parler sur les problèmes de l'optimisation prématurée. C'est certainement judicieux conseils que j'ai suivi tous les jours, mais cela ne signifie pas que l'optimisation n'est pas nécessaire de temps en temps. (double négatif!). Permettez-moi de laisser libre cours à ma curiosité, à tout le moins)

51voto

astander Points 83138

De Classes Statiques et les Membres de Classe Statiques (Guide de Programmation C#)

Un appel à une méthode statique génère un appel d'instructions de Microsoft intermediate language (MSIL), alors que un appel à une méthode d'instance génère un callvirt instruction, qui a également vérifie la présence d'un objet null références. Cependant, la plupart du temps la différence de performances entre les deux n'est pas significative.

24voto

JSBձոգչ Points 25069

En dehors de ce astander dit, votre question suggère une incompréhension de ce que les méthodes d'instance ne. Indépendamment du fait que la fonction est statique ou non, il n'est qu' une copie de la fonction de code dans la mémoire. Un non-statique méthode doit être appelée par un objet, mais l'objet n'a pas son propre exemplaire de la méthode. Donc, l'utilisation de la mémoire statiques et non statiques les méthodes sont en fait identiques, et comme d'autres l'ont souligné, les caractéristiques de performance sont presque identiques.

Non statique des variables membres, cependant, n'existent pas séparément pour chaque objet que vous créez. Mais il est presque toujours une perte de temps à s'inquiéter de l'utilisation de la mémoire, à moins que vous avez une mémoire de problème lié à votre programme.

18voto

Christian Madsen Points 718

C'est un peu hors-sujet, mais n'en est pas moins important.

Le choix des méthodes de prise de statique ou de l'instance ne doit pas être basé sur le temps d'exécution (qui de toute façon ne semble pas à la matière). Il devrait être de savoir si la méthode fonctionne sur un objet. Par exemple, toutes les Mathématiques.* les méthodes sont statiques alors que par exemple (la plupart) de la Chaîne.* des méthodes sont en instance, car ils fonctionnent sur une instance de Chaîne. Ma philosophie personnelle: un bon design doit faire pour les quelques cycles qui peuvent être enregistrées ailleurs.

Un autre point de vue sur le sujet: j'ai récemment travaillé avec un gars qui a dit que les méthodes statiques sont mauvais parce qu'ils nous ramènent à l'âge sombre de la programmation procédurale et donc, doit être évité à tous les frais. Cela a entraîné bizarre exemples de classes différentes instances pour l'accès à des méthodes qui n'ont absolument aucun intérêt dans le fonctionnement interne de l'objet.

Ouf, il était bon de se que, de mon foyer.

1voto

Mike Dunlavey Points 25419

Bonnes réponses - fondamentalement, cela n'a pas d'importance, ce qui est la réponse à presque toutes les questions de ce type. Même si cela a fait une différence - Si le temps d'exécution de votre programme coûte un dollar, ce genre de problème coûtera probablement une fraction de cent, et il est très probable que d'autres choses coûtent beaucoup plus cher .

0voto

Jesse C. Slicer Points 11750

Certes , mais vous constaterez que si vous ne créez pas un cluster de supercalculateur de traitement de transactions à très haut volume couvrant un monde entier, il n'y aura pas de différence appréciable.

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