Mengapa pengeditan XML / pencarian XPath menggunakan jumlah memori yang begitu konyol?

0

Saya memiliki file XML besar (sekitar 37 MB — ini adalah file XML yang mendasarinya dalam dokumen Word sekitar 350 halaman) yang saya coba selidiki dengan XPath. Saya melakukan ini 'secara manual' daripada secara terprogram, dengan membuka file dalam editor XML dan mencari di sana.

Saya sudah mencoba dengan Xmplify, QXmlEdit, SublimeText dengan ekstensi XPath, dll., Dan mereka semua menderita masalah yang sama: hanya membuka file sangat lambat dan menyimpan banyak sekali memori, dan melakukan pencarian XPath hampir tidak mungkin .

Sebagai contoh, saya baru saja mencoba membuka file di Xmplify. Itu memakan waktu sekitar tiga menit, dan tanpa dokumen lain, penggunaan memori Xmplify naik menjadi sekitar 1 GB.

Kemudian saya mencoba melakukan query XPath ini (saya mencari semua insersi terlacak yang terdiri dari string en ):

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

Itu memberi saya SPOD untuk sementara waktu. Setelah sekitar 15 menit menggunakan sekitar 100% CPU, Xmplify sekarang menggunakan 60 GB memori , dan OS saya memberi tahu saya bahwa saya kehabisan memori aplikasi dan perlu memulai hal-hal yang berhenti secara paksa.

Bagi saya itu agak berlebihan untuk satu permintaan XPath dalam satu file, walaupun itu file yang cukup besar. Aplikasi lain yang saya coba gunakan tidak terlalu buruk, tetapi membuka dokumen dan menjalankan segala jenis permintaan XPath masih membutuhkan waktu beberapa menit, dan penggunaan memori mereka juga dapat dihitung dalam GB, jadi bukan hanya Xmplify yang tidak efisien.

Apa alasannya? Mengapa XPath (tampaknya) begitu intensif sumber daya? Apakah perbedaan antara OS (milik saya adalah macOS Sierra)?

 

Saya berdebat apakah akan memposting ini di sini atau di StackOverflow, tetapi karena saya secara khusus tidak melakukan ini secara terprogram, saya memutuskan ini mungkin tempat yang lebih baik. Jangan ragu untuk bermigrasi jika ada tumpukan yang lebih baik untuk itu.

Janus Bahs Jacquet
sumber
1
FWIW, Saxon akan menjalankan ekspresi ini terhadap file 100Mb dari baris perintah menggunakan memori 435Mb: 266ms untuk analisis kueri, 1,97s untuk parsing XML dan bangunan pohon, 55ms untuk evaluasi kueri. Tetapi editor XML cenderung membangun struktur di dalam memori yang dirancang terutama untuk mengedit daripada meminta.
Michael Kay
@MichaelKay Angka-angka itu sepertinya sepenuhnya masuk akal bagi saya — bahkan lebih cepat dari yang diharapkan. Tetapi tentunya perbedaan yang begitu besar itu merupakan indikator lebih dari sekadar pilihan desain? Saya belum pernah mendengar tentang Saxon sebelumnya; akan melihat ke dalamnya untuk melihat apakah mungkin saya bisa membuatnya bekerja untuk tujuan saya.
Janus Bahs Jacquet