摘要:如何才能最好地存储需要在运行时访问(但不存储在内存中)的数据,而不会使其他人难以编辑数据?
我一直在研究几种不同的方法来存储必须在运行时访问的数据,但这些解决方案似乎都与我的问题无关。如果在阅读本文后您看到另一篇回答我的问题的帖子,请将我链接到它,我很乐意查看。
我正在创建一个程序来修改一些视频游戏。该应用程序背后的主要思想是游戏更新的灵活性。这意味着我必须使每个人都可以轻松访问存储所有地址的文件。目前我将数据存储在文本文件中,如下所示:
0x00000000 Description
然后,我的应用程序将文本文件加载到字典列表中,使用前 8 个(检查以删除 0x 并确保能够解析该值)字符作为 uint 值,并将该行的其余部分存储为密钥(每个密钥都是唯一的,有一个检查以确保没有重复项)。这在开始时运行良好,但存储的数据量越来越大,应用程序无法处理它。我得到堆栈溢出,或者数据不会被存储。我想知道的是如何存储数据以便在程序运行时可以有效地访问它?我研究过 sql 数据库,但我担心人们会很难编辑它们(包括我自己,我只使用过一次 sql 数据库),或者性能可能会很慢。如果这不是 在这种情况下,我将不胜感激只是一个如何完成的小例子。任何建议表示赞赏,谢谢!
这是用于加载信息的当前代码(我认为不需要它,但如果你想看看我在这里做什么)
using (r)
{
int counterSuccess = 0;
int counterFailed = 0;
while ((origString = r.ReadLine()) != null)
{
if (origString.Length >= 8)
{
if (origString.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase))
{
origString = origString.Substring(2);
}
parseSuccess = uint.TryParse(origString.Substring(0, 8), System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.CurrentCulture, out addr);
addrIdentifier = origString.Remove(0, 8);
addrIdentifier = addrIdentifier.Trim();
if (!parseSuccess)
{
counterFailed++;
}
else if (parseSuccess)
{
Addresses.Add(addrIdentifier, addr);
counterSuccess++;
}
}
}
r.Close();