Статические поля никогда не собираются мусором.Взгляните на статью Джеффри Рихтера .
Статические поля рассматриваются сборщиком мусора как корень, поэтому сборщик мусора всегда будет предполагать, что используются статические поля.
Статические поля инициализируютсякогда тип владельца загружен.JIT-компилятор загружает тип, когда ему нужно построить метод, и видит ссылку на этот тип.После загрузки тип остается там в течение всего срока службы AppDomain, поэтому все, на что ссылаются поля, принадлежащие типу (статические поля), будет считаться используемыми ссылками и не будет собирать мусор.
Кроме того, в отношении этогоутверждение:
Я не могу выяснить, каково время жизни этих статических переменных, они создаются (запускается статический конструктор), когда к ним обращаются в первый раз.
Технически статические переменные не обязательно "трогаются" в первый раз в статическом конструкторе.Рассмотрим класс следующим образом:
public static class Test
{
private static MyType myType;
static Test()
{
myType = new MyType();
}
}
Статический конструктор (конструктор типов) никогда не будет вызываться, если у вас нет кода, который выполняет и ссылается на этот тип, например var x = Test.myType;
.Что ж, это, вероятно, зависит от того, что именно означает «затронут».
Ответ:
Статические типы живут в AppDomain, так как они обращались в первый раз, пока AppDomain не был выгружен.Поэтому вам не нужно продлевать срок их службы до тех пор, пока запущен AppDomain.