Warum ist die Geschwindigkeit zwischen ArcGIS und QGIS so unterschiedlich?

17

Ok, ich bin kein Programmierer, sondern ein produktiver GIS-Benutzer. Ich weiß, dass QGIS in C ++ und ArcGIS in ??? geschrieben ist. In letzter Zeit versuche ich für die meisten meiner Aufgaben QGIS immer zu verwenden, nicht nur, weil es kostenlos ist, sondern auch, weil die Benutzererfahrung so gut ist.

Können Sie mir einige Gründe für den Geschwindigkeitsunterschied zwischen diesen beiden Systemen nennen? Ehrlich gesagt, es schmerzt mich, ArcGIS 10 aufgrund seiner Geschwindigkeit zu verwenden, und ich habe einen PC mit 8 GB RAM.

GeoH2O
quelle
3
Können Sie weitere Informationen zu den Aspekten bereitstellen, die Sie als langsam empfinden? ZB nach Daten suchen, Raster analysieren, Geoverarbeitung usw.?
Stephen Lead
Die allgemeine Erfahrung ist sehr langsam ... ich meine das Hinzufügen von Shapefiles ... Öffnen von Arctoolbox usw.
GeoH2O
2
ArcGIS ist definitiv nicht in .NET geschrieben. Es ist größtenteils in C ++ geschrieben, mit vielen anderen
Dingen, die
1
@StephenLead, ich habe ogr2ogrbeim Konvertieren von Shapefiles 36-mal schneller getaktet als Arcgis ( ref ). Ich gehe davon aus, dass QGIS bei der gleichen Aufgabe etwas langsamer ist als Barebones ogr2ogr, aber nicht viel, da es ogr verwendet (Beweise in beide Richtungen sind willkommen).
Matt Wilkie
3
vielleicht konversation bezüglich: bestimmte geschwindigkeitsunterschiede könnten woanders durchgeführt werden, vielleicht chat? chat.stackexchange.com/transcript/message/3510767#3510767
matt wilkie

Antworten:

10

ArcGIS scheint sehr aufgebläht zu sein. Ich erinnere mich an einen großen Leistungseinbruch bei der Migration von Arcview 3.2 auf ArcGIS 8.0, der an vielen Stellen noch vorhanden ist. Zu dieser Zeit dachte ich, dass es viel damit zu tun hat, dass ESRI früheren Arc / Info-Code auf Windows migriert und einige Leistungseinbußen hinnehmen musste, aber ich bin mir nicht sicher, ob das stimmt. Ich erinnere mich, dass ich auf dieser Site einige Beispiele zu Funktionen gesehen habe, die in Arcview 3.3 immer noch erheblich schneller sind als in ArcGIS 10. Dies hat nichts mit Startzeiten usw. zu tun '. Klicken und Warten hat nichts mit Geschick zu tun.

Ich denke, die Realität ist, dass ArcGIS nicht mit Blick auf die Leistung geschrieben wurde und jede Version versucht, immer mehr Funktionen auf eine bereits überlastete Code-Plattform zu werfen.

blindjesse
quelle
12

Ich bin mit QGIS nicht so vertraut, aber ich frage mich, wie es sich im Hinblick auf die Erweiterbarkeit mit ArcGIS vergleichen lässt. Leider scheint es zumindest einige Kompromisse zwischen Erweiterbarkeit und Leistung zu geben. Der beste Weg, um ein Gefühl für die ArcGIS-Erweiterbarkeit zu bekommen, ist ein Blick auf die COM-Komponentenkategorien von Esri in der Registrierung.

Jede Kategorie stellt einen Ort dar, an dem Benutzer DLLs registrieren können, die Klassen enthalten, die eine Esri-Schnittstelle implementieren. Es gibt viele Kategorien. Diese Kategorien enthalten auch Hundefutter - Esri verwendet sie nicht nur, um Anpassungen von Drittanbietern zu ermitteln, sondern auch, um sofort einsatzbereite Funktionen bereitzustellen. Dies bietet zwar ein sehr feinkörniges Maß an Anpassung, bedeutet jedoch auch, dass alle diese Feinkörner zur Laufzeit erkannt und geladen werden müssen. Ich bin mir nicht sicher, wie hoch die Umzugskosten sind, aber sie müssen erheblich sein.

Bildbeschreibung hier eingeben

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

Wenn Sie eine DLL in Visual Studio erstellen, gibt es einen Ort, an dem Sie die Basisadresse für das Laden der DLL angeben können . Da so viele DLLs unterschiedlicher Größe geladen werden, wäre es sehr schwierig, dies im Voraus für eine ArcObjects-Anpassung zu wissen. Trotzdem frage ich mich, ob eine Konfigurationsdatei erstellt werden könnte, die angibt, wo die DLL in den Speicher geladen werden soll. Wenn dies der Fall ist, kann ein Benutzer nach Ausführung von arcmap mit den geladenen DLLs, die er normalerweise verwendet, eine Routine ausführen, die die DLL-Basisadressen in eine Konfigurationsdatei schreibt. Auf diese Weise kann beim Start von arcmap eine Verlagerung durch Laden in diese Adressen vermieden werden . Andererseits spielt dies bei 64-Bit vielleicht keine Rolle.

Bei 10.0 führte Esri Add-Ins ein. Die Kategorien von Add-Ins sind viel kleiner, und die Erkennung hängt nicht von der Windows-Registrierung ab. Stattdessen werden die Add-In-DLLs komprimiert und in einem bekannten Ordner abgelegt. Ich bin nicht sicher, wie dies in Bezug auf die Leistung mit DLLs verglichen wird, die über die Windows-Registrierung ermittelt wurden. Ich denke, das Hauptziel war, die Installation durch Nichtadministratoren zu ermöglichen.

Ich gehe davon aus, dass sich die Frage auf das Desktop-Produkt bezieht. Das neue ArcGIS Runtime- Produkt ist viel leichter. Ich habe gehört, dass es als Ersatz für MapObjects beschrieben wurde. Es wird interessant sein zu sehen, wie es sich entwickelt. Wenn Esri die Erweiterbarkeit für WPF Runtime einführt, wird hoffentlich nicht derselbe Mechanismus für die Erkennung verwendet, der von Visual Studio beim Auffüllen der Liste der Assemblys verwendet wird. Das erste Mal, dass Sie auf "Verweis hinzufügen ..." klicken, ist schmerzhaft langsam geworden.

Kirk Kuykendall
quelle
3
Vor ein paar Jahren wurde mir von einem Esri-Vertriebsmitarbeiter gesagt, dass Esri die größte COM-Bibliothek der Welt hat, die leicht größer ist als alles, was selbst Microsoft gebaut hat. Ich bin seitdem davon ausgegangen, dass ein Teil der Trägheit von Arcgis Desktop darin besteht, die gesamte Bibliothek auf einmal zu laden, anstatt nur die benötigten Teile auf Abruf abzurufen.
Matt Wilkie
@mattwilkie Die Startzeit für ArcMap war früher viel langsamer. Um dies zu verbessern, wurden Just-in-Time-Erweiterungen eingeführt . Ich bin nicht sicher, aber ich denke, ein ähnlicher Ansatz wird für gx-Objekte verwendet, die geladen werden, wenn Sie das Dialogfeld zum Hinzufügen von Daten zum ersten Mal starten.
Kirk Kuykendall
hmm. Die Startzeit ist für mich nicht kürzer (vorausgesetzt, ich gehe aus dem Speicher, nicht aus Daten, also könnte es nur Wahrnehmung sein). 17s vom Klicken auf die Schaltfläche "Arcmap 10" in der Taskleiste, bis etwas getan werden kann (wenn der Assistent "Letzte Karte laden" deaktiviert ist). Die zweite Sitzung dauert ungefähr 12 Sekunden. Dies ist nach dem Ersetzen der C: -Festplatte durch eine SSD. Quantum benötigt 4s für den ersten Lauf und 2s für den nächsten.
Matt Wilkie
@mattwilkie Ja, gleichzeitig wurden neue Symbolleisten usw. hinzugefügt, sodass Leistungssteigerungen durch Just-in-Time-Funktionen Verzögerungen aufgrund neuer Softwarefunktionen wahrscheinlich nicht vollständig kompensiert haben. Weitere zu berücksichtigende Faktoren: Greifen Sie auf einen Lizenzserver zu? Wie viel RAM? Ist es schneller, wenn Sie Ihre normal.mxt löschen / umbenennen? (Testen Sie das zweite Mal nach dem Löschen, da der erste Start einige Zeit in Anspruch nimmt, um es neu zu erstellen.) Haben Sie Anpassungen installiert?
Kirk Kuykendall
1
Kirk: tolle Antwort. @mattwilkie: es ist wahr. Frau Office verfügte zu einem Zeitpunkt über rund 400 (+?) COM-Objekte. Ich denke, die GeoDatabase selbst hat mittlerweile so viele. Die Wahrheit ist, dass ESRI zum Guten oder Schlechten ein bisschen COM-verrückt geworden ist. Ich denke für die Zeit war es eine sichere Entscheidung.
Ragi Yaser Burhum
8

Verzeihen Sie, dass ich den Thread wiederbelebt habe, aber ich kann ein spezielles Beispiel dafür geben, wie sich die Benutzererfahrung für ArcMap und QGIS unterscheidet.

Heute musste ich ein Punktraster mit einem Abstand von 250 Metern über ein kleines Land hinweg erstellen, das Punktraster auf ein Ländergrenzpolygon zuschneiden und die Werte mehrerer Raster mit dem Punktraster verknüpfen.

In ArcMap dauerte das Herunterladen der Daten zu einem fertigen Dataset ca. 10 Minuten. In QGIS (Wroclaw) stürzte das Programm zweimal ab, schnitt nur das Raster mit dem Polygon ab und lief dann eine Stunde lang, bevor es beim dritten Versuch abgeschlossen wurde. Dies ist auf einer Box mit 4 Dual-Cores und 6 GB RAM.

Ich liebe QGIS und es ärgert mich, ArcMap zu verwenden, aber ich finde viele häufige Anwendungsfälle, in denen QGIS meine Anforderungen nicht erfüllt.

Wenn jemand Ratschläge zur Leistungsoptimierung hat, die diese Leistungslücke schließen könnten, bin ich gespannt.

Chris

iamchriskelley
quelle
Einverstanden, aber für das, was es wert ist, bin ich immer zuerst bei QGIS und wenn es dort nicht funktioniert,
kehre ich
1
Klingt für mich wie ein Käfer. Abstürze sind kein Maß für schlechte Leistung, sondern ein Symptom für einen Fehler.
Meldet
Für wie viel Fläche bauen Sie dieses Punktraster auf? In QGIS (1.9) lief die gleiche Operation mit 57.000 Punkten problemlos.
Simbamangu
@Simbamangu das war für eine Bounding Box um Honduras - ungefähr eine halbe Million Punkte. bei Nicklas_Aven: Point taken; Wenn ich Zeit habe, um zuverlässig zu reproduzieren, werde ich einreichen.
Iamchriskelley
6

Ich glaube nicht, dass Arc in .NET geschrieben ist. Arcobjects werden in C ++ geschrieben. Arc ist möglicherweise langsamer, da viele erweiterte GUI's, Hilfsprogramme, Add-Ons usw. verwendet werden. QGIS ist eine großartige Software, aber es fehlen einige nützliche Funktionen, die für Anfänger gut sein könnten. Ich denke auch nicht, dass grundlegende Lavel-Tools in ESRI (Arcobjects) langsam sind. Es kommt in der Regel auf die Benutzerfähigkeiten an. Wenn Benutzer wissen, wie man Arc verwendet, ist es überhaupt nicht so langsam. Allerdings sollte ich auch erwähnen, dass jedes Werkzeug von Fall zu Fall in Bezug auf seine Leistung geprüft werden sollte. Die andere Sache ist, dass Arc zuerst in der GIS-Szene war. Erstens (relativ zu QGIS) ist es immer mit Fehlern und die nächste Generation ist ein bisschen besser, in diesem Fall schneller, aber all dies ist nur meine persönliche Meinung.

Tomek
quelle
2
Nebenbemerkung: Ich vermute, dass zumindest Teile des ArcGIS-Kerns noch in Fortran geschrieben sind (was angeblich für bestimmte numerische Aufgaben genauso schnell ist, wenn nicht sogar schneller als C): Wenn Sie eine .NET-Konsolenanwendung ausführen, die dies nutzt Wenn Sie in ArcObjects drücken, Ctrl+Cwährend ein ArcObjects eine Operation ausführt, wird eine Nachricht aus einer Fortran-Laufzeitbibliothek angezeigt.
Stakx
5
Auch ohne auf die Details einzugehen, basiert ArcObjects auf COM , einem der frühen Interoperabilitäts-Frameworks, und hat seine eigene Leistungsbelastung, insbesondere beim Marshalling zwischen verwaltetem (z. B. .NET) und nicht verwaltetem (C ++) Code.
blah238
4
@stakx In diesem Fortran-Code steckt Overhead, zumindest auf der Rasterseite (Spatial Analyst). Ich habe Fortran-Add-Ons für SA entwickelt und festgestellt, dass sie immer mindestens fünfmal schneller liefen. Im Laufe der Jahre haben die Wrapper-Layer für Wrapper für Wrapper, die zur Integration des ursprünglichen Codes (70er und 80er Jahre) erstellt wurden, die Leistung von Arc * zunehmend belastet.
Whuber
6

Dies hängt mit der Leistung von ArcGIS zusammen: ArcMap und ArcCatalog lassen sich auf neuen Laptops nur sehr langsam öffnen. Dies kann zum Teil für einige der Leistungsprobleme verantwortlich sein. Dieser Thread zeigt, wie sich Hardware-, Netzwerk- und Lizenzierungskonfigurationen erheblich auf die ArcGIS-Leistung auswirken können. Möglicherweise könnten einige der gemeldeten Geschwindigkeitsunterschiede eher auf solche Faktoren als auf inhärente Unterschiede in den Fähigkeiten zurückzuführen sein.

(Wird als Antwortlink gepostet, da Kommentare verloren gehen.)

Gemeinschaft
quelle
1
Antworten und Kommentare haben hier unterschiedliche Zwecke, Dan. Sie haben recht, Kommentare haben einen zweitklassigen Status. Ein Grund ist, aufrichtig hilfreiche Antworten hervorzuheben. Alles, was keine Antwort ist, sollte der Versuch sein, eine Frage beantwortbar zu machen oder eine Frage oder Antwort zu verbessern: Das ist ein Kommentar, auch wenn er wirklich brillant ist.
Whuber
Einverstanden, dass die Version in unseren Labors besser funktioniert als die Testversion, die ich auf meinem PC
ausführe
2

Ich arbeite mit Daten auf Unternehmensebene (z. B. Point-of-Interest-Daten für die ganze Türkei) und manchmal benötige ich dieses Rendering, um den Datensatz zu überprüfen.

Wenn Sie Ihre Leistung mit ArcGIS verbessern möchten, gibt es einige Ratschläge.

Verwenden Sie immer projizierte Daten. Verwenden Sie Geodatabases oder ArcSDE mit Postgresql funktioniert perfekt für mich.

Durch die Verwendung der File-Geodatabase und, falls möglich, von arcsde wird die Geschwindigkeit Ihrer Operationen erhöht. Meine persönlichen Erfahrungen mit QGIS und ArcMap sind eigentlich das Gegenteil. Wie Es dauert fast Minuten, um 3 Millionen Punkte auf einer Karte zu rendern. Andererseits rendert ArcMap sie innerhalb von Sekunden.

Nur meine Meinung.

Anıl Çelik
quelle
Warum 3 Millionen Punkte rendern? Wenn Sie meinen, dass der Layer 3 Millionen Punkte hat und einige davon aus Ihrer Sicht sind, ist dies auch in QGIS schnell, aber Sie benötigen einen räumlichen Index. Ich stimme jedoch zu, dass es ziemlich schwierig sein kann, QGIS zu stoppen, wenn Sie den Fehler machen, zu viele Geometrien zu rendern. Auch wenn das Rendern mit esc beendet wird, hängen die bereits gerenderten Geoemtries manchmal dort.
Nicklas Avén