PB_*_*MLT 4 c# memory-management
我想知道当你实例化类时,C#类的实际代码是否被加载到RAM中?
因此,例如,如果我有2个类CLASS A,CLASS B,其中A类有10000行代码,但只有1个字段,一个int.B类有10行代码,1个字段也有int.如果我实例化A类,由于其代码行,它将占用比B类更多的RAM?
一个补充问题,如果代码行与类一起加载到内存中,它们是否会为类的每个实例加载?或者只为所有实例一次?
提前致谢.
在桌面框架中,我认为方法是逐个方法进行JIT的.我不知道在第一次加载类时,类的IL是否完全加载到RAM中,或者它们是否只是将内存映射到汇编文件.
无论哪种方式,您都可以获得所有实例的单个副本 - 至少对于非泛型类型.对于泛型类型(和方法),它稍微复杂一些 - 所有引用类型类型参数都有一个JIT表示,每个值类型类型参数都有一个JIT表示.所以List<string>和List<Stream>共享本地代码,但List<int>并List<Guid>没有.(适用于具有多个泛型类型参数的类型的外推.)尽管对象没有自己的本机代码副本,但您仍然只能获得同一构造类型的所有实例的一个副本.