Warum verwendet die XML-Bearbeitung / XPath-Suche so viel Speicherplatz?

320
Janus Bahs Jacquet

Ich habe eine große XML-Datei (etwa 37 MB - dies ist die zugrunde liegende XML-Datei in einem Word-Dokument mit etwa 350 Seiten), die ich mit XPath durchsuchen möchte. Ich mache das "manuell" und nicht programmgesteuert, indem ich die Datei in einem XML-Editor öffne und dort suche.

Ich habe es mit Xmplify, QXmlEdit, SublimeText mit der XPath-Erweiterung usw. versucht, und alle leiden unter dem gleichen Problem: Das Öffnen der Datei ist lächerlich langsam und ungeheuer viel Speicher, und eine XPath-Suche ist nahezu unmöglich .

Ich habe beispielsweise versucht, die Datei in Xmplify zu öffnen. Das dauerte etwa drei Minuten und ohne die Verwendung anderer Dokumente stieg der Speicherplatz von Xmplify auf etwa 1 GB.

Dann habe ich versucht, diese XPath-Abfrage auszuführen (ich suche nach allen verfolgten Einfügungen, die aus der Zeichenfolge en bestehen ):

//w:ins[w:r/w:t = 'en'] 

Das gab mir für eine Weile einen SPOD . Nach ungefähr 15 Minuten bei ungefähr 100% CPU verbrauchte Xmplify jetzt 60 GB Speicher, und mein Betriebssystem sagte mir, dass mir der Speicher der Anwendung ausgeht und ich mit der Zwangsabschaltung beginnen musste.

Das erscheint mir für eine einzelne XPath-Abfrage in einer einzelnen Datei ziemlich übertrieben, selbst wenn es sich um eine ziemlich große Datei handelt. Die anderen Anwendungen, die ich ausprobiert habe, waren nicht so ungeheuerlich schlecht, aber das Öffnen des Dokuments und das Ausführen jeder Art von XPath-Abfrage dauerte noch einige Minuten, und ihre Speicherauslastung war auch in GB abzählbar. Daher ist Xmplify nicht nur ineffizient.

Was ist der Grund dafür? Warum ist XPath (anscheinend) so ressourcenintensiv? Unterscheidet es sich zwischen den Betriebssystemen (meines ist MacOS Sierra)?

 

Ich überlegte, ob dies hier zu veröffentlichen oder auf Stackoverflow, aber da ich ausdrücklich nicht das programmatisch tun, entschied ich mich das war wahrscheinlich der bessere Platz. Fühlen Sie sich frei, um zu migrieren, wenn es dafür einen besseren Stack gibt.

0
FWIW, Saxon führt diesen Ausdruck für eine 100-MB-Datei von der Befehlszeile aus mit 435 MB Speicher aus: 266 ms für die Abfrageanalyse, 1.97s für XML-Analyse und Baumstrukturierung, 55 ms für die Abfrageauswertung. XML-Editoren bauen jedoch wahrscheinlich eine In-Memory-Struktur auf, die hauptsächlich für die Bearbeitung und nicht für die Abfrage vorgesehen ist. Michael Kay vor 6 Jahren 1
@MichaelKay Das scheint mir eine völlig vernünftige Zahl zu sein - sogar schneller als erwartet. Aber eine so gewaltige Diskrepanz ist sicherlich ein Indikator für mehr als nur Designentscheidungen? Ich hatte vorher noch nie von Saxon gehört. werde das prüfen, um zu sehen, ob ich es vielleicht für meine Zwecke schaffen kann. Janus Bahs Jacquet vor 6 Jahren 0

0 Antworten auf die Frage