ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-05-19 09:54:30  阅读:1117  来源: 互联网

标签:c net internals


正如标题所示,我感兴趣的是静态类在.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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有