将数据保存在XML或数据库中更好吗?

时间:2013-03-16 14:39:46

标签: c# wpf simulation .net-4.5

我们开发航空公司模拟游戏,我们目前的结构将用户数据保存在XML文件中(以及所有游戏数据,如机场统计数据,飞机信息等)。

性能和功能方面,在本地计算机上存储此数据的最佳方法是什么?我听过一些双方但没有真正的具体或示例支持的答案。虽然我们的原始数据XML较小(<150KB),但保存的游戏相当大(3-10MB)并且跨越数千行或多或少的无组织数据。

想法,建议或建议?

2 个答案:

答案 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,则应编写应用程序层代码。

希望,这种见解和进一步的研究将对您有所帮助。