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

Je suppose que public cibles static public ou private doivent avoir une utilisation réduite de la mémoire, car il n’y a qu’une seule copie de la cible statique en mémoire.

Il semble que, parce qu’une méthode est statique, cela pourrait faire de la méthode un point d’optimisation supplémentaire par le compilateur CLR au-delà de ce qui est possible avec une fonction non statique. Juste une théorie fragile, alors je suis venu vous demander à tous.

Les méthodes static public ou private offrent-elles un avantage de performance supérieur à la réduction de l’utilisation de la mémoire?

(Note: je ne suis pas intéressé par les réponses qui traitent des problèmes d’optimisation prématurée. Certes, c’est un conseil judicieux que je suis chaque jour, mais cela ne signifie pas nécessairement que l’optimisation est parfois nécessaire. la curiosité, au moins)

À partir de classes statiques et de membres de classes statiques (Guide de programmation C #)

Un appel à une méthode statique génère une instruction d’appel en langage MSIL (Microsoft Intermediate Language), tandis qu’un appel à une méthode d’instance génère une instruction callvirt, qui vérifie également les références à un object nul. Cependant, la plupart du temps, la différence de performance entre les deux n’est pas significative.

Mis à part ce que disent les observateurs, votre question suggère une incompréhension des méthodes d’instance. Que la fonction soit statique ou non, il n’y a qu’une seule copie du code de fonction en mémoire. Une méthode non statique doit être appelée via un object, mais l’object ne porte pas sa propre copie privée de la méthode. L’utilisation de la mémoire des méthodes statiques et non statiques est donc identique et, comme d’autres l’ont fait remarquer, les caractéristiques de performance sont presque identiques.

Les variables de membre non statiques existent toutefois séparément pour chaque object que vous créez. Cependant, il est presque toujours inutile de vous préoccuper de l’utilisation de cette mémoire, à moins que vous ayez réellement un problème lié à la mémoire dans votre programme.

C’est un peu hors sujet, mais néanmoins important.

Le choix de rendre les méthodes statiques ou d’ instance ne doit pas être basé sur le temps d’exécution (ce qui semble ne pas avoir d’importance). Il doit être basé sur le fait que la méthode opère sur un object. Par exemple, toutes les méthodes Math. * Sont statiques alors que (par exemple) les méthodes Ssortingng. * Sont des instances car elles opèrent sur une instance Ssortingng. Ma philosophie personnelle: un bon design devrait compenser les quelques cycles qui peuvent être enregistrés ailleurs .

Autre sharepoint vue sur le sujet: J’ai récemment travaillé avec un type qui avait appris que les méthodes statiques étaient mauvaises parce qu’elles nous ramènent à l’âge sombre de la programmation procédurale et doivent donc être évitées à tout prix. Cela a abouti à des exemples étranges de classes qui nécessitaient des instances pour accéder à des méthodes qui n’avaient absolument aucun intérêt dans les composants internes de l’object.

Ouf, ça m’a fait du bien de recevoir ça de mon foyer.

Bonnes réponses – au fond, peu importe, c’est la réponse à presque toutes les questions de ce genre. Même si cela faisait une différence – Si le temps d’exécution de votre programme coûte un dollar, ce type 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 .

MeasureJe dois en être certain, mais vous constaterez que si vous ne créez pas une grappe de calcul intensif pour le traitement des transactions à très haut volume couvrant le monde entier, la différence ne sera pas appréciable.