0

XML ファイルを読み取るプロセスがあります。XMLTextReader クラスを使用してこれを行います。これは、高速で転送専用の XML パーサー/リーダーであると想定されているためです。

1 メガバイトのテスト ファイルでは問題なく動作しますが、ライブ システムで 12 メガバイトのファイルを処理すると完全に停止します。

独自の XML リーダーを作成する以外に、これに対する解決策はありますか? それは世界の終わりではありませんが、可能であれば利用可能な標準コンポーネントを使用したいと思います

4

6 に答える 6

1

問題が XmlTextReader にあるとしたら、私は非常に驚くでしょう。

XmlTextReader を作成し、Read() を使用してファイル内の各ノードをドキュメントの最後まで読み取るだけのテスト プログラムを数分かけて作成すると、バターをナイフで突き刺すような12MBのファイル。この問題が発生した場合、それが最初に試すことです。

XmlTextReader を問題の原因として排除すると、実際に問題を引き起こしているものに注意を向けることができるため、ノードを読み取るコードではなく、読み取っているノードを処理するコードである可能性が非常に高いです。 .

于 2008-10-02T19:47:16.613 に答える
1

SAXExpatは以前は非常に優れていました。Expat はXMLパーサーであり、ほぼリファレンス実装です。TCP接続を介して送信された同期XMLファイルを読み取るために使用したことを覚えています。時には非常に大きなファイル(約50MB)を問題なく読み取ることができました。それは 3、4 年前の .NET 1.1 で、本当にくだらないコンピューターでした。

于 2008-10-02T13:15:29.143 に答える
0

過去にも同様のパフォーマンスの問題がありました。DTD/スキーマに対してリモートで解決しようとしたことにさかのぼります。あなたはこれをやっていますか?可能であれば、XmlTextReader.XmlResolver を null に設定してみてください。

于 2008-10-02T13:05:48.090 に答える
0

たった一つの考え。プロセス全体にわたってデータベース トランザクションを開いていますか? その場合は、トランザクションなしで試すか、少なくともプロセス中に頻繁にコミットしてください。

于 2008-10-03T01:48:28.490 に答える
0

私はこれをお勧めしたくありませんが、ソフトウェアが販売されていない、または外部にない場合は、Mono からリーダーを取り込んで問題が解決するかどうかを確認できます。

于 2008-10-08T13:20:06.183 に答える
0

リーダーから得たものをどうするかによって異なります。それを XML DOM に入れていますか、それともオブジェクト モデルに入れていますか? それは、使用する言語やライブラリに関係なく、大きなメモリヒットになります。

1.1 に欠陥があるのか​​もしれませんが、2.0 を試してみることを考えましたか? XmlTextReader を 1.1 の時代に使ったことがないので、保証はできませんが、2.0 以降は完璧です。

于 2008-10-02T13:25:46.030 に答える