Статический конструктор выполняется при первом обращении к статическому члену.Зная это, у меня есть несколько вопросов:
- Означает ли это, что каждый раз, когда я обращаюсь к статическому методу, среда выполнения должна проверять, был ли вызван статический конструктор?
- Влечет ли это снижение производительности?
- Избегают ли статические классы "без конструктора" этого снижения производительности?
[EDIT] : Я хотел бы уточнить, что меня НЕ касаетсямикрооптимизация.
Я задаю этот вопрос, потому что это решение design .Если статический конструктор подвергнется снижению производительности, я разработаю свой код с учетом этого и буду больше знать о решениях, которые могут повлиять на производительность.
Вот пример, иллюстрирующий мой вопрос.Будет ли какая-то польза от использования метода Independent
и помещения его в отдельный статический класс?Таким образом, не нужно проверять, была ли инициализирована статическая Test
.[ Обновление Смотрите мой ответ ниже для лучшего и более простого примера].
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 # о статическом конструкторе:
Выполнение статического конструктора инициируется первым из следующих событий, происходящих в домене приложения:
- Создается экземпляр класса.
- Ссылки на любой статический член класса.