系统相关
首页 > 系统相关> > c# – 什么时候.NET中的静态类加载到内存中?

c# – 什么时候.NET中的静态类加载到内存中?

作者:互联网

正如标题所示,我感兴趣的是静态类在.NET中加载到内存中,尤其是C#.我假设它类似于Java中的this question和关于静态方法的this question,因为它是在第一次使用时加载的.另外,一旦它在内存中,它会一直存在,直到应用程序终止,或者当垃圾收集器出现清理使用它的类时,它会被清理干净吗?

我意识到静态类使用的少量内存在具有8 GB RAM标准的计算机世界中并不是非常重要,但了解内部结构总是很有趣.

编辑:

答案让我想要在这个问题上添加更多内容并通过一个例子来澄清.如果我理解正确,在下面的示例中,Contraption.SomeString将首先放在内存中,然后紧跟Contraption.AnotherString,第一次通过循环.

public static class Contraption
{
    public static string SomeString = "Some String";
    public static string AnotherString = "Another String";
}

public class Processor
{
    public void Process(List<SomeClass> items)
    {
        foreach(var item in items)
        {
            if(item.Name == Contraption.SomeString)
            {
                //do something
            }
            if(item.Name == Contraption.AnotherString)
            {
                //do something
            }
        }
    }
}

解决方法:

关于静态字段初始化,重要的一点是static constructor的使用.CLR有一个类加载器组件,它加载一个类(元数据信息)并从内存管理器请求内存分配,因为它们在程序中使用.元数据加载是一次性工作,发布它只是根据需要请求内存

正如在讨论中所理解的那样,静态类变量在任何地方的第一次使用时加载,并被赋予内存,但是使用静态构造函数可以确保在调用类加载器时将它们初始化为第一个,它是一次调用,它可以初始化类中的所有静态变量,这甚至在第一个使用策略之前,因为当CLR(mscoree.dll)是为给定程序加载组件时.

静态构造函数在任何情况下(程序重启除外)都不会在第一次调用之后调用,即使有异常,也可以通过将它们设置为null来收集其广泛使用的静态变量

标签:c,net,internals
来源: https://codeday.me/bug/20190519/1133903.html