0

摘要:如何才能最好地存储需要在运行时访问(但不存储在内存中)的数据,而不会使其他人难以编辑数据?

我一直在研究几种不同的方法来存储必须在运行时访问的数据,但这些解决方案似乎都与我的问题无关。如果在阅读本文后您看到另一篇回答我的问题的帖子,请将我链接到它,我很乐意查看。

我正在创建一个程序来修改一些视频游戏。该应用程序背后的主要思想是游戏更新的灵活性。这意味着我必须使每个人都可以轻松访问存储所有地址的文件。目前我将数据存储在文本文件中,如下所示:

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();
4

1 回答 1

0

我建议您使用 SQL 或 Access 数据库。即使对于初学者来说,它们也很容易处理。其他人编辑它们没有问题,他们的表现超出你的想象。您可以使用一小段代码非常轻松地导出任何类型的数据(例如文本或 CSV)。您只需要学习基本的 SQL 查询和一些简单的 C# 代码即可使用它们。您可能会在许多教授 C# 的通用书籍和MSDN 示例中找到初学者数据库程序。我自己通过 Deitel & Deitel Visual Basic 6 How to program 学习了数据库编程 :)。不要尝试,这是很久以前的事了。有关 C# 或任何语言的基本示例,您可以查看planet-source-code.com。欢迎来到强大的数据库编程和 SQL 世界。

于 2013-09-19T16:02:12.967 回答