我们开发航空公司模拟游戏,我们目前的结构将用户数据保存在XML文件中(以及所有游戏数据,如机场统计数据,飞机信息等)。
性能和功能方面,在本地计算机上存储此数据的最佳方法是什么?我听过一些双方但没有真正的具体或示例支持的答案。虽然我们的原始数据XML较小(<150KB),但保存的游戏相当大(3-10MB)并且跨越数千行或多或少的无组织数据。
想法,建议或建议?
答案 0 :(得分:3)
如果您不需要手动编辑文件,可以尝试使用BinaryFormatter序列化&amp;反序列化您的数据,应该比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;
}
}
}
答案 1 :(得分:0)
如果您将数据保存在XML文件中,那么请考虑使用XML数据库,例如Oracle BerkleyDB XML / BaseX / Sedna。您可以使用DB API进行数据操作,也可以使用XQuery查询该XML。 Berkley DB XML数据库性能良好。
如果您的用户数据,机场统计信息等具有可以逐行变化的信息,您也应该使用XML数据库。
如果您的数据模型结构合理,那么您可以使用MySql或PostGreSql等开源数据库来处理所有数据。
在这里,两者都可以正常使用您预期的数据库大小来进行数据添加/更新。您应该考虑使用数据模型来选择数据存储库类型。
如果选择XML数据库,则可以重复使用数据访问/保存代码。
如果选择RDBMS,则应编写应用程序层代码。
希望,这种见解和进一步的研究将对您有所帮助。