0

XML データベースを使用してアプリケーションを開発しています。データを読み書きする必要がある大きな XML ファイルがあります。問題は、パフォーマンスの問題のために、XML ファイル全体をメモリにロードしたくないのと、ファイル全体をループしたくないことです。ファイル全体をメモリにロードすると、アプリケーションのパフォーマンスに影響し、メモリリークのためにアプリケーションがクラッシュする可能性があるためです。

パフォーマンスとメモリに影響を与えずに、XML をファイルに読み書きするための十分な方法が必要です。

どんな助けでも大歓迎です。

4

4 に答える 4

4

この XML の決定があなたのものではなく、対処する必要がある場合 (MSDN サンプル全体を参照してください http://msdn.microsoft.com/en-us/library/bb387013.aspx )

static IEnumerable<XElement> StreamCustomerItem(string uri)
{
    using (XmlReader reader = XmlReader.Create(uri))
    {
        XElement name = null;
        XElement item = null;

        reader.MoveToContent();
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        name = XElement.ReadFrom(reader) as XElement;
                        break;
                    }
                }

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        item = XElement.ReadFrom(reader) as XElement;
                        if (item != null) 
                        {
                            XElement tempRoot = new XElement("Root", new XElement(name));
                            tempRoot.Add(item);
                            yield return item;
                        }
                    }
                }
            }
        }
    }
}

ただし、決定を制御する場合は、XML のことは忘れてください。あなたとあなたのアプリケーションが手間をかけずに適切に動作するのに役立ついくつかのオプションがあります。

  1. SQL コンパクト。Microsoft の優れた簡単な SQL アプローチで、SQL サーバー インスタンスは必要ありません。http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx
  2. SQL ライト。.net や Windows 8 アプリケーションでも動作し、簡単でかなり安定しています。http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

MySQL、MariaDB、または同様のものを使用することもできます!

于 2013-10-08T11:36:13.097 に答える
1

これを見てください。xml の高速読み取りについてのアイデアが得られます。http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx

既にstackoverflowにxmlファイルを書き込むことに関するいくつかのスレッドがあります。

C#で(大きな)XMLをファイルに書き込む方法は?

ただし、本当に優れたパフォーマンスを求めている場合は、sqlserver、mongodb などのいくつかのデータベース ソリューションの方が適していると思います。

于 2013-10-08T10:49:38.940 に答える
1

このリンクを使用してください。

XmlReaderを使用 します。これは、現在のレコードのみをメモリに保持できるようにするための優れた代替手段であり、パフォーマンスを大幅に向上させることができます。

編集: Load メソッドを使用しないでください。XML ファイル全体がメモリに読み込まれます。このファイルが非常に大きい場合、クエリの実行に時間がかかるだけでなく、メモリ不足で失敗する可能性があります。

于 2013-10-08T10:52:43.593 に答える