我目前正在开发一个简单的数据库结构来存储有关在游戏引擎中使用的组件的信息。
我有两个构成数据库的类:DBEntry_Name - 构成数据库中每个条目的类和NameDB,它是数据库本身。
我没有问题,但是关于如何在变量中存储对数据库条目的引用(在内存使用方面)的查询。我的一些条目包含对完全不同的数据库中的其他条目的引用。 典型条目的示例如下:
public class BuildingDB {
private static List<DBEntry_Building> AllBuildings = new List<DBEntry_Building>();
#region Towers
public static DBEntry_Building Tower = new DBEntry_Building {
ID = 1, // <== this is due to by replaced by a reference to the List index of the entry
Name = "Tower",
Prefab = Resources.Load("Prefabs/Tower") as GameObject,
Cost = 10,
BuildTime = 5.0f,
AttackSpeed = 1,
AttackDamage = 10,
AttackRange = 7,
ProjectileType = ProjectileDB.Rock, // <==== is this storing excess information? could we request the ID of the projectile and store that instead?
};
#endregion
}
我可以用一个函数来替换我遇到问题的行,而不是将DBentry交换为整数,然后可以将其替换为数据库列表的索引,但这是必要的吗?我怀疑ProjectileType会占用比简单int更多的内存,因此我会问这个问题。
如何存储ProjectileType?它的所有值都会被存储,还是会从射弹数据库中检索出来?
感谢。
答案 0 :(得分:0)
正如我在评论中已提到的那样。这非常依赖于您要定位的平台。最快的解决方案就是观察,或者如
所述...你不应该优化,因为你认为你会获得性能提升。有明显的优化(比如不在紧密循环中进行字符串连接),但是在可以测量之前,应该避免任何不是简单明了优化的事情。 〜 programmers SE
因此,除非您知道要移植到的目标平台(即移动端口),否则无法处理额外的内存负载。或者至少可以衡量机器性能/影响的差异,不值得考虑。
然而,您可以做出粗略的假设。我真的需要这些花车,精灵和整数。或者我可以只使用身份证?那么我以后会加载这个对象吗?有关确定何时开始进行这些优化的其他一些提示,请参阅此SO帖子When is optimization premature