我们开发了一款航空模拟游戏,我们当前的结构将用户数据保存在一个 XML 文件中(以及所有游戏数据,如机场统计数据、飞机信息等)。
在性能和功能方面,将这些数据存储在本地机器上的最佳方式是什么?我听到了双方的一些声音,但没有真正具体或有例子支持的答案。虽然我们的原始数据 XML 更小(<150KB),但保存的游戏非常大(3-10MB),并且跨越了数千行或多或少无组织的数据。
想法、建议或建议?
我们开发了一款航空模拟游戏,我们当前的结构将用户数据保存在一个 XML 文件中(以及所有游戏数据,如机场统计数据、飞机信息等)。
在性能和功能方面,将这些数据存储在本地机器上的最佳方式是什么?我听到了双方的一些声音,但没有真正具体或有例子支持的答案。虽然我们的原始数据 XML 更小(<150KB),但保存的游戏非常大(3-10MB),并且跨越了数千行或多或少无组织的数据。
想法、建议或建议?
如果您不需要手动编辑文件,您可以尝试使用 BinaryFormatter 来序列化和反序列化您的数据,应该比 XmlSerializer 快很多。
这是一个如何使用它的示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2
{
[Serializable()]
public class Child
{
public string Property1 { get; set; }
}
[Serializable()]
public class TestClass
{
public int Property1 { get; set; }
public string Property2 { get; set; }
public DateTime Property3 { get; set; }
public Child Child { get; set; }
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TestClass testClass = new TestClass()
{
Property1 = 1,
Property2 = "test",
Property3 = DateTime.Now,
Child = new Child()
{
Property1 = "test",
}
};
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
formatter.Serialize(memoryStream, testClass);
memoryStream.Position = 0;
TestClass deserialized = formatter.Deserialize(memoryStream) as TestClass;
}
}
}
如果您将数据保存在 XML 文件中,请考虑使用 XML 数据库,例如 Oracle BerkleyDB XML/BaseX/Sedna。您可以使用 DB API 进行数据操作,也可以使用 XQuery 查询该 XML。Berkley DB XML 数据库的性能很好。
此外,如果您的用户数据、机场统计数据等具有可以逐行变化的信息,您也应该使用 XML 数据库。
如果您的数据模型结构良好,那么您可以使用 MySql 或 PostGreSql 等开源数据库来处理您的所有数据。
在这里,两者都可以与您预期的数据库大小一起正常工作,以进行数据添加/更新。您应该考虑您的数据模型来选择数据存储库类型。
如果您选择 XML 数据库,您的数据访问/保存代码可能会被重用。
如果您选择 RDBMS,您应该为您的应用程序层编写代码。
希望,这种洞察力和进一步的研究会对你有所帮助。