Ich möchte herausfinden, was zum Erstellen einer benutzerdefinierten Implementierung einer ArcGIS-Funktion erforderlich ist. Insbesondere möchte ich GeoAnalyst.ISurfaceOp2.Visibility () implementieren , damit es schneller ausgeführt wird. Derzeit dauert es ca. 3 Sekunden pro Aufruf von Visibility (). Nach meinem begrenzten Verständnis besteht der Engpass darin, temporäre Raster in das Dateisystem zu schreiben. Wenn dies im Speicher erfolgen könnte, würde sich die Verarbeitungszeit vermutlich erheblich verkürzen. Ich mache das in einem .NET-Projekt, aber Lösungen in jeder Sprache sind willkommen.
arcgis-10.0
arcobjects
.net
algorithm
Ross Fuhrman
quelle
quelle
Antworten:
Diese Antwort erinnert an einige der Diskussionen in den Kommentaren und erweitert diese. Eine RAM-Disk emuliert ein externes Disk-Laufwerk unter Verwendung eines Teils des RAM in einem Computersystem. Es kann mit Geschwindigkeiten lesen und schreiben, die mit dem In-Memory-Caching vergleichbar sind, abzüglich eines geringen Overheads für die Übersetzungsprotokolle, um festplattenorientierte Befehle in speicherorientierte Befehle umzuwandeln. Eine RAM-Disk wird durch Ausführen einer speziellen Software auf Betriebssystemebene, einem "Gerätetreiber", erstellt. Open Source- und freie RAM-Festplatten sind für viele Betriebssysteme verfügbar, einschließlich Windows.
Daher auf eine Art und Weise zu einem Engpass beschleunigen aufgrund Zwischen Disk - I / O eine RAM - Disk (Kauf des zusätzlichen RAM , falls erforderlich) und legen Sie den neu erstellten Ordner dort einzurichten ist. (Dies ist normalerweise eine Softwareeinstellung.)
Eine weitere Option ist die Installation eines High-End- DRAM-Solid-State-Geräts (SSD), bei dem es sich im Wesentlichen um einen RAM-Block in einer separaten Verpackung mit einer elektronischen Schnittstelle handelt, die wie ein Festplattenlaufwerk wirkt. Es wird anstelle eines Festplattenlaufwerks in einem Computersystem installiert und verhält sich genau wie ein anderes Festplattenlaufwerk ohne zusätzliche Software, liest und schreibt jedoch fast so schnell wie Speicherzugriffe. Diese sind relativ teuer, aber wahrscheinlich wird auch für einen sehr großen Zwischenrasterspeicher nur ein kleiner benötigt.
Bevor Sie einen dieser Schritte ausführen, ist es wichtig, ein Profil zu erstellender Prozess, um festzustellen, wo der Engpass wirklich ist. (Windows wurde in den letzten Jahren mit immer leistungsfähigeren Profiling- und Überwachungs-Apps ausgeliefert, die in Win 7 als Task-Manager / Resource-Monitor-Paar verfügbar sind, und natürlich sind viele ähnliche Apps auch für andere Betriebssysteme verfügbar.) Viele Systeme werden automatisch konfiguriert oder kann so konfiguriert werden, dass Lese- und Schreibvorgänge für kurze Zeit im RAM zwischengespeichert werden. Das Caching funktioniert fast genauso wie eine RAM-Disk, ist aber wahrscheinlich noch schneller: Die Software glaubt, dass sie Zwischendateien auf die Disk schreibt, aber das Betriebssystem schreibt sie vorübergehend zuerst in den RAM und greift nicht auf die Disk zu, in der Hoffnung, dass bald dieselben Daten vorliegen wird zurückgelesen und gelöscht. In diesem Fall ist ein physisches Schreiben niemals erforderlich.
Angesichts des Rechenaufwands, der für eine vollständige Sichtbarkeitsberechnung erforderlich ist (in einem naiven Algorithmus muss jede Zelle für jeden Blickwinkel einmal auf Sichtbarkeit überprüft werden), sollte zumindest vermutet werden, dass die Rechengeschwindigkeit und nicht die Festplatten-E / A das Problem sein kann Hier. In diesem Fall sind RAM-Festplatten oder SSDs Zeit- und Geldverschwendung. Stattdessen sollten Anstrengungen unternommen werden, um den zugrunde liegenden Algorithmus zu analysieren und zu verbessern .
In einem anderen Thread wurde diskutiert, ob die Leistung der RAM-Festplatte ArcGIS hilft .
quelle
Leider können Sie die IRasterAnalysisEnvironment nicht so einstellen, dass sie mit einem In-Memory-Arbeitsbereich funktioniert.
Dieser Thread behebt das Problem.
quelle