繁体   English   中英

将一个文件ID映射到另一个文件的最有效方法

[英]Most efficient way to map one fileID to another

我正在本地化游戏。 我大约有1%的游戏资产(大约2万个文件中的200个)需要用不同的资源(从1到1)替换为每种语言。我正在考虑在内存不足的环境中做到这一点的“最佳”方法。 这是我当前的想法列表:

  • 散列文件ID,以几乎恒定的时间1转换为另一个。 优势在于速度。 缺点是这可能会占用大量内存,并且无法像其他方法一样有效地利用内存。

  • 输入要翻译成地图的每个文件ID。 记录时间查询,但也许可以提高内存效率? 我没有其他解决方案那么有经验,所以我不能说这将如何工作。

  • 将每个文件ID成对输入到向量中,完成后对向量进行排序,然后进行搜索。 记录时间查询,也许比地图更有效率?

  • 在任何步骤上,如果资产不变,则在前端将kIsThisAssetTranslated []的布尔表添加到固定时间保释中。

只是寻找一些经验和对社区将考虑的方法(或我错过的东西)的看法。 我倾向于使用散列,因为每个文件访问都会调用该散列,但与往常一样,Ram与性能的关系是一个有趣的问题。

您可以预先计算需要转换的FileID。 查找完美的哈希值; 这可能是您所需要的。 但是,2log(200)只有8。哈希的开销非常大,对于完美的哈希来说,开销更大。

请记住,文件速度很慢-二进制搜索需要进行8次内存访问,可能需要一微秒的时间,甚至闪存也没有那么快。

取决于您有多少RAM。 具有200至20k条目的哈希表实际上并不会占用太多内存(根据台式机标准)。 如果必须在运行时确定文件是否已翻译,那么为什么不创建一个包含所有已翻译文件的映射,并为所有可用语言创建子目录。 然后执行查找后,只需从语言环境目录(例如,en-US)中加载它,或在文件名中添加前缀/后缀即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM