1

航空会社のシミュレーションゲームを開発し、現在の構造ではユーザーデータをXMLファイル(および空港統計、航空機情報などのすべてのゲームデータ)に保存しています。

パフォーマンスと機能の面で、このデータをローカルマシンに保存するための最良の方法は何ですか?私は両方の側面のいくつかを聞いたことがありますが、実際の具体的または例に裏付けられた答えはありません。生データのXMLは小さいですが(<150KB)、保存されたゲームは非常に大きく(3-10MB)、数千行の多かれ少なかれ組織化されていないデータにまたがっています。

考え、提案、または推奨事項?

4

2 に答える 2

3

ファイルを手動で編集する必要がない場合は、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;
        }
    }
}
于 2013-03-16T15:01:05.033 に答える
0

データをXMLファイルに保存する場合は、Oracle BerkleyDB XML / BaseX/SednaのようなXMLデータベースを検討してください。データ操作にはDBAPIを使用でき、そのXMLのクエリにはXQueryを使用することもできます。BerkleyDBXMLデータベースはパフォーマンスが優れています。

また、ユーザーデータ、空港統計などに行ごとに異なる情報がある場合は、XMLデータベースを使用する必要があります。

また、データモデルが適切に構造化されている場合は、MySqlやPostGreSqlなどのオープンソースデータベースを使用してすべてのデータを処理できます。

ここでは、どちらもデータの追加/更新で予想されるデータベースサイズで正常に機能します。データリポジトリタイプを選択するには、データモデルを検討する必要があります。

XMLデータベースを選択した場合、データアクセス/保存コードが再利用される可能性があります。

RDBMSを選択する場合は、アプリケーション層用にコーディングする必要があります。

この洞察とさらなる研究があなたを助けることを願っています。

于 2013-03-16T14:57:00.893 に答える