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