Может ли статический конструктор снизить производительность доступа к статическим методам?

Статический конструктор выполняется при первом обращении к статическому члену. Зная это, у меня есть несколько вопросов:

  • Означает ли это, что каждый раз, когда я обращаюсь к статическому методу, среда выполнения должна проверять, был ли вызван статический конструктор?
  • Это снижает производительность?
  • Избегают ли статические классы без конструкторов этого снижения производительности?

[EDIT] : Хочу уточнить, что меня НЕ интересует микрооптимизация.
Я задаю этот вопрос, потому что это проектное решение. Если статический конструктор снижает производительность, я буду разрабатывать свой код с учетом этого и буду лучше осведомлен о решениях, которые могут повлиять на производительность.

Вот пример, иллюстрирующий мой вопрос. Будет ли какая-то польза от использования метода Independent и помещения его в отдельный статический класс? Таким образом, не нужно будет проверять, был ли инициализирован статический Тест . [ Обновление См. Мой ответ ниже для лучшего и более простого примера].

static class Test {
  // Static constructor with dependent method:
  static int x;
  static Test() { x = 5; }
  static int Dependent() { return x; }

  // Static, independent method:
  static int Independent(int y) { return y+1; }
}

Вот цитата из спецификации C # о статическом конструкторе:

Выполнение статического конструктора запускается первым из следующих событий, происходящих в домене приложения:

  • Экземпляр класса создан.
  • Ссылка на любой из статических членов класса.

6
задан Scott Rippey 15 November 2011 в 20:41
поделиться