в моем классе у меня есть статический словарь объекта строк, который содержит большое количество элементов (он читает из файла и инициализирует их). Я написал для этого статический конструктор, и это занимает несколько секунд, но я хочу сделать это один раз чтобы быть быстрее, так как я делаю это в ASP.Net, и я хочу, чтобы мой веб-сайт не имел этих накладных расходов, что мне делать? если этот конструктор запускается для каждого объекта, то вместо этого я думал о каком-то методе, но я думаю, что мне нужно запускать этот метод на каждой странице веб-сайта, которую запускает пользователь, поэтому я снова думаю, что это будет то же самое, я прав? каково ваше решение для инициализации большого набора переменных только один раз? Спасибо
в С# статический конструктор запускается для каждой инициализации объекта или только один раз?
Ответы (2)
Он запускается один раз для типа на AppDomain
. Не один раз за экземпляр. Из спецификации С# 4, раздел 10.12:
Статический конструктор для закрытого типа класса выполняется не более одного раза в данном домене приложения. Выполнение статического конструктора запускается первым из следующих событий, происходящих в домене приложения:
- Создается экземпляр типа класса.
- Ссылаются на любой из статических членов типа класса.
Обратите внимание на часть о том, что это относится к классу closed. Таким образом, если у вас есть общий тип Foo<T>
, то Foo<string>
является отдельным типом для Foo<object>
(и т. д.), будет иметь отдельные статические поля и его статический конструктор будет вызываться отдельно.
Он запускается только один раз в течение всего срока службы приложения.
Из MSDN — статические конструкторы:
Статический конструктор используется для инициализации любых статических данных или для выполнения определенного действия, которое необходимо выполнить только один раз. Он вызывается автоматически перед созданием первого экземпляра или обращением к любым статическим элементам.