Perché la velocità delle prestazioni tra ArcGIS e QGIS è così diversa?


17

Ok, non sono un programmatore ma un prolifico utente GIS. So che QGIS è scritto in C ++ e ArcGIS in ??? ma per la maggior parte dei miei compiti ultimamente cerco sempre di utilizzare QGIS non solo perché è gratuito, ma per il fatto che la sua esperienza utente è così buona.

Tutti i Guru GIS là fuori puoi dirmi alcune ragioni per la differenza di velocità tra questi due sistemi? Onestamente mi fa male usare ArcGIS 10 per la sua velocità e ho un PC con 8 GB di RAM.


3
Puoi fornire ulteriori informazioni su quali aspetti trovi lenti? Ad esempio, cercare dati, analizzare raster, geoprocessing, ecc.?
Stephen Lead,

L'esperienza generale è molto lenta .. intendo aggiungere gli shapefile ... aprendo arctoolbox ecc.
GeoH2O,

2
ArcGIS non è sicuramente scritto in .NET. È per lo più scritto in C ++ con molte altre cose
imbustate

1
@StephenLead, ho ogr2ogrconvertito 36 volte più velocemente di Arcgis durante la conversione di shapefile ( ref ). Mi aspetto che QGIS sia un po 'più lento di barebone ogr2ogr nello stesso compito, ma non di molto dal momento che usa ogr (l'evidenza in entrambi i modi è benvenuta).
Matt Wilson

3
forse conversazione re: specifiche differenze di velocità potrebbero essere applicate altrove, forse chat? chat.stackexchange.com/transcript/message/3510767#3510767
matt wilkie

Risposte:


10

ArcGIS sembra molto gonfio. Ricordo un enorme successo in termini di prestazioni durante la migrazione da Arcview 3.2 ad ArcGIS 8.0 e in molti punti esiste ancora. A quel tempo pensavo che avesse molto a che fare con la ESRI che eseguiva la migrazione del precedente codice Arc / Info su Windows e che doveva tagliare alcuni angoli delle prestazioni, ma non sono sicuro che sia vero. Ricordo di aver visto alcuni esempi in questo sito sulle funzioni che sono ancora molto più veloci in Arcview 3.3 rispetto ad ArcGIS 10. Questo non ha nulla a che fare con i tempi di avvio, ecc. E non sono d'accordo con la risposta precedente di quanto non abbia a che fare con le "competenze dell'utente" '. Fare clic e attendere non ha nulla a che fare con l'abilità.

Penso che la realtà sia che ArcGIS non sia stato scritto pensando alle prestazioni e ogni versione continua a tentare di lanciare sempre più funzionalità su una piattaforma di codice già sovraccarica.


12

Non ho familiarità con QGIS, ma mi chiedo come si paragona ad ArcGIS in termini di estensibilità. Sfortunatamente sembra esserci almeno qualche compromesso tra estensibilità e prestazioni. Il modo migliore che ho trovato per avere un'idea dell'estensibilità di ArcGIS è quello di dare un'occhiata alle categorie di componenti COM di Esri presenti nel registro.

Ogni categoria rappresenta un luogo in cui gli utenti possono registrare dll contenenti classi che implementano un'interfaccia Esri. Ci sono molte categorie. Queste categorie contengono anche cibo per cani : Esri le utilizza non solo per scoprire personalizzazioni di terze parti, ma anche funzionalità pronte all'uso. Sebbene ciò fornisca un livello di personalizzazione molto fine, significa anche che tutti questi grani fini devono essere scoperti e caricati in fase di esecuzione. Non sono sicuro del costo del trasferimento , ma deve essere significativo.

inserisci qui la descrizione dell'immagine

C:\Program Files (x86)\ArcGIS\Desktop10.0\Bin\Categories.exe

Quando si crea una DLL in Visual Studio, esiste una posizione in cui è possibile specificare l'indirizzo di base in cui caricare la DLL. Dal momento che ci sono così tante DLL di dimensioni diverse che vengono caricate sapendo questo in anticipo per una personalizzazione di ArcObjects sarebbe molto difficile. Tuttavia, mi chiedo se sia possibile creare un file di configurazione che indichi dove caricare la DLL in memoria. In tal caso, una volta che un utente ha arcmap in esecuzione con le dll caricate che userà in genere, potrebbe eseguire una routine che scriverà gli indirizzi di base dll in un file di configurazione. In questo modo all'avvio di arcmap si potrebbe evitare il trasferimento trasferendo tali indirizzi. Poi di nuovo forse con 64 bit questo non ha importanza.

A 10.0 Esri ha introdotto i componenti aggiuntivi. Le categorie di componenti aggiuntivi sono molto più piccole e il rilevamento non si basa sul registro di Windows. Invece, le DLL del componente aggiuntivo vengono compresse e inserite in una cartella nota. Non sono sicuro di come questo paragona le prestazioni con le DLL scoperte tramite il registro di Windows. Penso che l'obiettivo principale fosse consentire l'installazione da parte di non amministratori.

Suppongo che la domanda si riferisca al prodotto desktop. Il nuovo prodotto ArcGIS Runtime è molto più leggero. L'ho sentito descritto come un sostituto di MapObjects. Sarà interessante vedere come si evolve. Se Esri introduce estensibilità per WPF Runtime, spero che non utilizzino lo stesso meccanismo di rilevamento utilizzato da Visual Studio quando popola l'elenco di assembly. La prima volta che fai clic su "Aggiungi riferimento ..." è diventato dolorosamente lento.


3
Qualche anno fa un rappresentante di vendita di Esri mi ha detto che Esri ha la più grande libreria COM sulla terra, facilmente più grande di qualsiasi cosa persino Microsoft avesse costruito. Da allora ho assunto che parte della lentezza di Arcgis Desktop sta caricando tutta quella libreria in una sola volta anziché afferrare solo i pezzi necessari su richiesta.
Matt Wilson

@mattwilkie Il tempo di avvio di ArcMap era molto più lento. Per migliorarlo hanno introdotto estensioni just-in-time . Non ne sono certo, ma penso che venga adottato un approccio simile con gli oggetti gx che vengono caricati quando si avvia la finestra di dialogo Aggiungi dati per la prima volta.
Kirk Kuykendall,

hmm. Il tempo di avvio non è più veloce per me (ammesso che vada dalla memoria, non dai dati, quindi potrebbe essere solo una percezione). 17s facendo clic sul pulsante Arcmap 10 nella barra delle applicazioni fino a quando non è pronto per fare qualcosa (con la procedura guidata "carica ultima mappa" disattivata). La seconda sessione è di circa 12 secondi. Questo dopo aver sostituito il disco rigido C: con un SSD. Quantum richiede 4 secondi per la prima manche e 2 secondi per la prossima.
Matt Wilson

@mattwilkie Sì, allo stesso tempo hanno aggiunto nuove barre degli strumenti, ecc., quindi qualsiasi aumento delle prestazioni del just-in-time probabilmente non ha completamente compensato i ritardi derivanti dalle nuove funzionalità del software. Anche altri fattori da considerare: sta accedendo a un server delle licenze? Quanta RAM? È più veloce se elimini / rinomini il tuo normal.mxt? (prova la seconda volta dopo averlo eliminato dal primo avvio ci vorrà del tempo per ricrearlo) Hai installato personalizzazioni?
Kirk Kuykendall,

1
Kirk: ottima risposta. @mattwilkie: è vero. La signora Office aveva, ad un certo punto, circa 400 (+?) Oggetti COM. Penso che ormai il GeoDatabase ne abbia da solo così tanti. La verità è che, nel bene e nel male, l'ESRI è diventato un po 'pazzo di COM. Penso per il momento, è stata una decisione sana e sicura.
Ragi Yaser Burhum,

8

Perdonami per aver resuscitato il thread, ma posso dare un esempio specifico di come l'esperienza utente differisce per ArcMap e QGIS.

Oggi avevo bisogno di costruire una griglia di punti con una distanza di 250 metri in un piccolo paese, tagliare la griglia di punti su un poligono di confine del paese e associare i valori di diversi raster alla griglia di punti.

In ArcMap, mi ci sono voluti circa 10 minuti, dal download dei dati a un set di dati finito. In QGIS (Wroclaw), il programma si è bloccato due volte semplicemente tagliando la griglia con il poligono, quindi ha funzionato per un'ora prima di completare il terzo tentativo. Questo è su una scatola con 4 dual-core e 6 GB di RAM.

Adoro QGIS e mi irrita usare ArcMap, ma trovo molti casi d'uso comuni in cui QGIS non soddisfa le mie esigenze.

Ora, se qualcuno ha qualche consiglio di ottimizzazione delle prestazioni in grado di risolvere questo divario di prestazioni, sono tutte orecchie.

Chris


d'accordo ma per quello che vale mi
affido

1
Mi sembra un bug. Gli arresti anomali non sono una misura di cattive prestazioni ma un sintomo di qualcosa di sbagliato. Segnalalo alle persone di QGIS
Nicklas Avén il

Per quanto è grande un'area che stai costruendo questa griglia di punti? Ho appena eseguito lo stesso tipo di operazione su 57k punti in QGIS (1.9) senza problemi.
Simbamangu,

@Simbamangu questo era per un rettangolo di confine attorno all'Honduras - circa mezzo milione di punti. a Nicklas_Aven: punto preso; se avrò tempo di riprodurre in modo affidabile, invierò.
iamchriskelley,

6

Non credo che Arc sia scritto in .NET. Gli oggetti arco sono scritti in C ++. Arc potrebbe essere più lento a causa dell'uso di molte GUI avanzate, strumenti di aiuto, componenti aggiuntivi, ecc. QGIS è un ottimo software ma manca alcune funzionalità utili che potrebbero essere utili per i principianti. Inoltre, non credo che gli strumenti di base per la creazione dell'ESRI (Arcobjects) siano lenti. Di solito si tratta di competenze degli utenti, se l'utente sa come usare Arc, non è affatto lento. Detto questo, dovrei anche ricordare che ogni strumento dovrebbe essere considerato caso per caso per quanto riguarda le sue prestazioni. L'altra cosa è che Arc è stato il primo sulla scena GIS. Il primo (relativamente a QGIS) è sempre con bug e la prossima generazione è un po 'meglio, in questo caso più veloce, ma tutto questo è solo una mia opinione personale.


2
Sidenote: sospetto che almeno parti del core di ArcGIS siano ancora scritte in Fortran (che si dice sia più veloce, se non più veloce di, C per alcune attività numeriche): se si esegue un'applicazione console .NET che utilizza ArcObjects e si preme Ctrl+Cmentre ArcObjects esegue alcune operazioni, si riceverà un messaggio da una libreria di runtime Fortran.
stakx,

5
Inoltre, senza entrare nei dettagli grintosi, ArcObjects è basato su COM , uno dei primi framework di interoperabilità, e ha i suoi carichi di prestazioni soprattutto quando si esegue il marshalling tra codice gestito (ad es. .NET) e non gestito (C ++).
blah238,

4
@stakx C'è un overhead in quel codice Fortran, almeno sul lato raster (Analista spaziale). Ho sviluppato componenti aggiuntivi Fortran per SA e ho scoperto che correvano sempre almeno cinque volte più velocemente. Nel corso degli anni, gli strati di involucri su involucri su involucri che sono stati costruiti per integrare il codice originale (anni '70 e '80 vintage) hanno creato un peso crescente sulle prestazioni di Arc *.
whuber

6

Ciò riguarda le prestazioni di ArcGIS: ArcMap, ArcCatalog si aprono molto lentamente sul nuovo laptop con ampie risorse? che può in parte spiegare alcuni dei problemi di prestazione. Quel thread mostra come l'hardware, la rete e la configurazione delle licenze possano avere un effetto sostanziale sulle prestazioni di ArcGIS. Probabilmente, alcune delle differenze di velocità riportate potrebbero essere dovute a tali fattori piuttosto che a differenze intrinseche nelle capacità.

(Inserito come link di risposta, poiché i commenti tendono a perdersi.)


1
Le risposte e i commenti hanno scopi diversi qui, Dan. Hai ragione, i commenti hanno uno status di seconda classe. Uno dei motivi è quello di enfatizzare le risposte veramente utili. Tutto ciò che non è una risposta dovrebbe essere uno sforzo per rendere una domanda responsabile o per migliorare una domanda o una risposta: questo è un commento, anche quando è davvero brillante.
whuber

Concordato che la versione nei nostri laboratori funziona meglio della versione di prova che sto eseguendo sul mio PC ...
GeoH2O,

2

Lavoro con i dati a livello aziendale (ad esempio i dati sui punti di interesse per l'intera Turchia) e talvolta solo per controllare il set di dati, ho bisogno di quel rendering.

Se vuoi migliorare le tue prestazioni con ArcGIS, ci sono alcune cose che posso consigliare;

Usa sempre i dati proiettati. Utilizzare geodatabase o ArcSDE con postgresql funziona perfettamente per me.

L'uso del file geodatabase e, se possibile, arcsde aumenta la velocità delle operazioni. La mia esperienza personale con QGIS e ArcMap è in realtà il contrario. Dato che ci vogliono quasi minuti per rendere 3 milioni di punti su una mappa. D'altra parte ArcMap li rende in pochi secondi.

Solo la mia opinione.


Perché rendere 3 milioni di punti? Se intendi che il livello ha 3 milioni di punti e alcuni di essi sono nella tua vista, anche questo è veloce in QGIS, ma avrai bisogno di un indice spaziale. Ma sono d'accordo che QGIS può essere abbastanza difficile da fermare quando si commette l'errore di provare a rendere troppe geometrie. Anche quando si uccide il rendering con esc, le geoemtries già renderizzate a volte pendono lì.
Nicklas Avén,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.