存储运行时必须使用的数据

时间:2013-09-19 15:15:35

标签: c# sql performance runtime

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

我一直在研究存储在运行时必须访问的数据的几种不同方法,但没有一个解决方案与我的问题相关。如果在阅读本文后您看到另一篇回复我的问题的帖子,请将其链接到我,我很乐意将其核实。

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

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

1 个答案:

答案 0 :(得分:0)

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