質問

アドバイスが必要です。名前&を含む10,000行をインポートするアプリケーションがありますテキストファイルからXElementsへのアドレスは、後で同期キューに追加されます。インポートが完了すると、アプリは、エンキューを解除し、データベース呼び出しを行い、データベース出力を要求ドキュメントに挿入し、処理されたドキュメントを出力キューに挿入することで、XElementを処理するワーカースレッドを生成します。すべての要求が処理されると、出力キューがディスクにXMLドキュメントとして書き込まれます。

処理中にリクエストにフィールドを追加する柔軟性が必要だったため、リクエストにXElementsを使用しました。すなわち、仕事の種類によっては、アプリは電話番号、生年月日、またはメールアドレスを、公的記録データベースとの名前/住所の一致に基づいてリクエストに追加することを要求する場合があります。

私の質問は; XElementsはかなりの量のメモリを使用しているようで、ドキュメントが処理メソッドを通過するときに多くの解析が行われることを知っています。私はXElementsをDictionaryオブジェクトに置き換えることを検討していますが、その努力に見合うだけの価値があるかどうかは懐疑的です。本質的には同じことを達成します。

思考?

役に立ちましたか?

解決

では、実際にはXMLを使用していませんか?名前/値のペアのコレクションとして XElement を使用しているだけですか?もしそうなら、私は間違いなく辞書を使用します。あなたのコードも潜在的にきれいになると思います。

一方、純粋にXMLを使用している場合は、おそらく XElement に固執したいでしょう。

実際に問題がありますか?あなたはそれがかなりのメモリを使い果たしていると言います-あなたは十分なメモリを持っていますか?メモリを追加購入できますか?メモリを節約するためだけであれば、リファクタリングを数時間行うよりも、ほぼ確実に安くなります。 (このアプリは1つのボックスでのみ実行されるようです-間違っている可能性があります。より広く展開されるほど、それを最適化するのに少し時間を費やすのが理にかなっています。)

編集:さて、メモリを追加購入するのは現実的ではありません。それでも、実際に問題がありますか?おそらく必要以上のメモリを使用すると、この影響はどうなりますか? 本当に費用がかかりますか?

他のヒント

LINQを使用することは、使用する前にツリー全体を保存する必要を回避できる場合に意味があります。

各行からクエリを作成する際に、できるだけ多くの処理を行うことを検討します。

その後、クエリ結果を取得して処理し、結果をデータベースに保存します。

これにより、各行が必要なときにのみ読み込まれ、処理および保存されるため、メモリの問題が軽減されます。

これは役立つ場合があります。 http:// www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

クエリの結果を取得し、各顧客を対象にforループを実行し、レコードを保存します。

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top