Frage

Ich brauche einen Rat. Ich habe Anwendung, die 10.000 Zeilen mit Namen und Adresse aus einer Textdatei in XElements importiert, die zu einer synchronisierten Warteschlange anschließend hinzugefügt werden. Wenn der Import abgeschlossen ist laicht die App Arbeiter-Threads, der die XElements deenqueuing verarbeiten, indem sie eine Datenbank Anruf tätigt, die Datenbankausgabe in das Anforderungsdokument einfügen und das verarbeitete Dokument in eine Ausgabewarteschlange einzufügen. Wenn alle Anforderungen verarbeitet wurden, wird die Ausgabewarteschlange auf der Festplatte als XML-Dokument geschrieben.

Ich habe XElements für die Anforderungen, weil ich die nötige Flexibilität, um Felder auf die Anforderung während der Verarbeitung hinzuzufügen. das heißt auf der Arbeit der App eingeben Je möglicherweise erforderlich, dass es die Telefonnummer, Geburtsdatum oder E-Mail-Adresse auf eine Anfrage hinzufügen, basierend auf einem Name / Adresse Match gegen einen öffentlichen Eintrag Datenbank.

Meine Fragen sind; Die XElements scheint ziemlich viel Speicher zu verwenden, und ich weiß, es gibt eine Menge von Parsen wie das Dokument seinen Weg durch die Verarbeitungsverfahren macht. Ich betrachte die XElements mit einem Dictionary-Objekt zu ersetzen, aber ich bin skeptisch, die Verstärkung der Mühe wert sein wird. Im Wesentlichen wird es das Gleiche erreichen.

Die Gedanken?

War es hilfreich?

Lösung

Sie sind also eigentlich keine XML als solche verwendet? Sie verwenden nur XElement als eine Sammlung von Name / Wert-Paare? Wenn ja, würde ich auf jeden Fall ein Wörterbuch verwenden. Ich würde erwarten, dass Ihr Code möglicherweise kommt sauberer als gut.

Auf der anderen Seite, wenn Sie wirklich mit Hilfe von XML sind, möchten Sie wahrscheinlich mit XElement bleiben.

Haben Sie eigentlich ein Problem ? Sie sagen, es ist ziemlich viel Speicher mit bis - hast du genug Speicher? Könnten Sie mehr Speicher kaufen? Das wäre mit ziemlicher Sicherheit billiger als die Ausgaben sogar ein paar Stunden Refactoring, wenn es von Speichern Speicher nur um ist. (Es klingt wie diese App nur auf einem Feld ausgeführt -.. Ich könnte falsch sein Je mehr weit verbreitet ist, desto mehr wird es wohl Sinn macht, es zu optimieren einige Zeit zu verbringen)

EDIT: Okay, also mehr Speicher kaufen nicht wirklich lebensfähig ist. Trotzdem haben Sie tatsächlich ein Problem? Was ist die Auswirkung dieser vielleicht mit mehr Speicher als es braucht? Was ist es wirklich kostet Sie?

Andere Tipps

Mit LINQ kann Sinn machen, wenn Sie vermeiden können, die den gesamten Baum zu speichern, bevor Sie es.

Ich würde aussehen wie viel Verarbeitung wie möglich beim Aufbau der Abfrage aus jeder Zeile zu tun.

Sie nehmen dann die Abfrage-Ergebnisse und sie dann verarbeiten, um das Ergebnis in der Datenbank zu speichern.

Dies wird Speicherprobleme reduzieren, da jede Zeile nur eingelesen, wenn nötig und dann verarbeitet und gespeichert werden.

Sie finden diese hilfreich: http: // www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

Nehmen Sie

, um die Ergebnisse der Abfrage, tun eine for-Schleife durch jeden Kunden und speichern Sie die Aufzeichnung:

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top