.NET 数据类型、内存分配与参数传递深度解析
1. 预定义 .NET 数据类型
打开编译后的 DLL,展开 CH03_DynamicPerformance 节点,再展开 CH03_DynamicPerformance.Program 节点,找到 _dynamicType : private object 行调用。从这里可以看到,动态类型在编译时会被转换为对象类型。大家可以自行调整 ILDASM 设置,查看 BenchmarkTests 类的代码。
2. 静态类型理解
在 .NET Core 和 .NET 5.0 之前的版本中,应用程序编译运行时会在各自的应用程序域中执行。若多次运行应用程序,每个运行实例都会有自己的应用程序域。在 ASP.NET 中,一个应用程序会使用多个应用程序域,这在使用静态类型时很重要,因为在单个应用程序域中,静态类型只有一个实例,且运行时在使用前必须创建该实例。
AppDomain 对象有自己的静态堆,静态值类型和引用类型会被放在静态堆上,并由应用程序域管理。静态类型会被垃圾回收器考虑,但不会被回收,因为它们可能引用其他堆上的对象。不同应用程序域中的静态类型和变量是相互隔离的。
在 .NET Native 和 .NET 5.0 中,应用程序域已被弃用,因为它们需要昂贵的运行时支持。微软建议用进程和/或容器替代应用程序域,还推荐使用 AssemblyLoadContext 类进行程序集的动态加载。
静态类由运行时仅实
超级会员免费看
订阅专栏 解锁全文
1294

被折叠的 条评论
为什么被折叠?



