Подтвердить что ты не робот

Статические функции С# работают лучше, чем нестатические функции, за пределами использования памяти?

Я предполагаю, что цели public или private static должны иметь уменьшенное использование памяти из-за того, что в памяти есть только одна копия статической цели.

Похоже, что метод является статическим, что может сделать метод потенциальной точкой для дальнейшей оптимизации компилятором CLR за пределами того, что возможно при нестатической функции. Однако, на всякий случай, я пришел, чтобы спросить вас всех.

Do static public или private методы обеспечивают повышенную производительность при использовании более низкой памяти

(Примечание: меня не интересуют ответы, которые говорят о проблемах преждевременной оптимизации. Разумеется, этот звуковой совет я следую каждый день, но это не значит, что время от времени не требуется оптимизация (двойной отрицательный!). потворствовать моему любопытству, по крайней мере)

4b9b3361

Ответ 1

Из Статические классы и члены статического класса (Руководство по программированию на С#)

Вызов статического метода генерирует инструкции по вызову в Microsoft промежуточный язык (MSIL), тогда как вызов метода экземпляра генерирует инструкция callvirt, которая также проверяет ссылки на нулевые объекты. Однако большую часть времени разница в производительности между двумя не имеет значения.

Ответ 2

Помимо того, что сказал испытуемый, ваш вопрос предполагает неправильное понимание того, что делают эти методы. Независимо от того, является ли эта функция статической или нет, в памяти есть только одна копия кода функции. Нестатический метод должен быть вызван через объект, но объект не несет свою собственную частную копию метода. Таким образом, использование памяти статических и нестатических методов на самом деле идентично, и, как указывали другие, характеристики производительности почти идентичны.

Однако нестатические переменные-члены существуют отдельно для каждого создаваемого объекта. Но это почти всегда пустая трата времени, чтобы беспокоиться об этом использовании памяти, если у вас нет проблемы с памятью в вашей программе.

Ответ 3

Это немного не по теме, но тем не менее важно.

Выбор методов статический или экземпляр не должен основываться на времени выполнения (что в любом случае не имеет значения). Он должен основываться на том, работает ли этот метод на объекте. Например, все математические методы являются статическими, например, (большинство) String. * являются экземплярами, поскольку они работают с экземпляром String. Моя личная философия: хороший дизайн должен компенсировать несколько циклов, которые могут быть сохранены в другом месте.

Еще один взгляд на эту тему: Недавно я работал с парнем, которому сказали, что статические методы злы, потому что они возвращают нас к темному периоду процессуального программирования, и поэтому его следует избегать любой ценой. Это привело к появлению странных примеров классов, которые требовали экземпляров для доступа к методам, которые абсолютно не интересовали внутренности объекта.

Фу, мне было приятно получить это от моего очага.

Ответ 4

Хорошие ответы - в основном это не имеет значения, что является ответом почти на каждый вопрос такого рода. Даже если бы это имело значение - если время выполнения вашей программы стоило доллар, такая проблема, вероятно, будет стоить до половины процента, и очень вероятно, что есть другие вещи значительно дороже.

Ответ 5

MeasureIt, но вы найдете, если не создаете суперкомпьютер обработки сверхвысоких транзакций, кластер, он не будет иметь заметной разницы.