如果我们不从 class、Class 方法和大小信息创建对象,是否仍然在执行程序时加载到 ram?

If we don't create an object from a class, Class methods and size informations, still loading to ram on executing Program?

我打算在 Unity/C# 中编写一个纸牌游戏。在这个游戏中,每张卡牌都是从主卡牌 class 衍生出来的不同 class。他们将覆盖 Card 虚拟功能。我的问题是,如果有 1000 张或更多卡片,每张卡片 class 方法和大小信息都会在执行游戏时加载到 ram?如果是这样,我们如何管理这个时期?我只想将 classes 数据加载到 ram 中。你有什么建议?提前致谢。

如果您认为这可能有问题,请创建一个快速测试。使用一个或两个虚拟方法创建主 class 应该很容易,然后创建 100 个派生 classes,每个都以相同的方式覆盖主 class 方法.类似于:

public class MainCard {
    // properties
    // 2 methods
}

加载并 运行 您的程序(只是实例化一个 MainCard 对象的简单程序),并确定它占用了多少内存。

然后,创建 100 个派生的 classes 来覆盖 MainCard 中的方法。重写的虚方法的实现可以相同。

public class Card01 : MainCard {
    // override both MainCard methods
}

public class Card02 : MainCard {
    // copy Card01 implementation here
}

这样做 100 classes。看看需要多少内存。

请记住,在 C# 中,class 的代码甚至不一定要加载到内存中,直到创建 class 的实例,然后您得到的只是元数据,除了实际调用的函数。 Just In Time 编译器根据需要处理加载和编译为本机代码。当然,除非你在安装时预编译。

不过还要记住,一旦编译,代码将在程序的整个生命周期中保留在内存中。因此,如果可以在单个游戏中使用每张可能的卡片,那么您必须确保所有卡片的编译代码都适合内存。