摘要:如何最好地存储运行期间需要访问的数据(但不存储在内存中),而不会让其他人难以编辑数据?
我一直在研究存储在运行时必须访问的数据的几种不同方法,但没有一个解决方案与我的问题相关。如果在阅读本文后您看到另一篇回复我的问题的帖子,请将其链接到我,我很乐意将其核实。
我正在创建修改某些视频游戏的程序。该应用程序背后的主要思想是游戏更新的灵活性。这意味着我必须使所有人都可以轻松访问所有地址的文件。目前我将数据存储在文本文件中,如下所示:
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();
答案 0 :(得分:0)
我建议您使用SQL或Access数据库。它们非常容易处理,即使对于初学者也是如此。其他人编辑它们没有问题,它们的表现超出了你的想象。您可以使用一些小代码片段(例如,文本或CSV)轻松导出您想要的任何类型的数据。您只需要学习基本的SQL查询和一些简单的C#代码即可使用它们。您可能会在许多教授C#和MSDN examples的通用书籍中找到初学数据库程序。我自己学习了Deitel& amp ;;的数据库编程。 Deitel Visual Basic 6如何编程:)。不要试试,很久以前。有关C#或任何语言的基本示例,您可以查看planet-source-code.com。欢迎来到强大的数据库编程和SQL世界。