<\/HEAD>
Dies ist der dritte Teil einer vierteiligen Serie über die Herausforderungen bei der Benennung neuer Funktionen in Softwareanwendungen; insbesondere die Konsequenzen, wenn die Benennung unzureichend ist. Der erste Teil der Serie <\/A>betrachtet einen Fall, in dem der Name einer neuen Funktion das Verhalten dieser Funktion klar und prägnant beschreibt. Der zweite Teil der Serie<\/A> betrachtet denselben Fall, wenn neuere Funktionalität das ursprüngliche Verhalten dieser neuen Funktionalität verändert. Der dritte Teil der Serie<\/STRONG> zeigt, wie sich die Dokumentation geändert hat, um diese veränderte Funktionalität zu adressieren. Und schließlich diskutiert der vierte Teil der Serie <\/A>, was das alles für Endbenutzer und Entwickler bedeutet.<\/EM><\/P><\/P>
Der erste Teil dieser Serie (
What's in a Name: When in_memory = In-memory<\/A>) betrachtete die Einführung des in-memory workspace und erstellte einige grundlegende Beispiele, um ihn zu testen. Im Grunde funktionierte es und die neue in_memory-Funktion bedeutete tatsächlich in-memory. Der zweite Teil dieser Serie (What's in a Name: When in_memory != In-memory<\/A>) betrachtet dieselben Beispiele und sieht, wie sie sich nach der Einführung von ArcPy und Background Processing entwickeln. Ehrlich gesagt ist es schwer zu sagen, wie diese Beispiele ausgegangen sind. Die höfliche Art, es auszudrücken, wäre "gemischte Ergebnisse." Obwohl es Fälle gab, in denen in_memory wie in-memory aussah, gab es auch Fälle, in denen in_memory wie on-disk aussah. Selbst wenn in_memory scheinbar in-memory war, gab es einige merkwürdige Verhaltensweisen bei einigen Tools/Funktionen.<\/P><\/P>
Um eine bessere Vorstellung davon zu bekommen, was vor sich gehen könnte, muss ich mir die unterstützende Dokumentation etwas ansehen, und das Online-Handbuch ist ein ebenso guter Startpunkt wie jeder andere. Da die Verhaltensweisen, die wir im zweiten Teil dieser Serie gesehen haben, mit ArcGIS 10.0 beginnen und bis ArcGIS 10.2.2 andauern, werde ich direkt zum ArcGIS 10.2.2-Handbuch springen mit der Annahme, dass das Neueste und Beste bezüglich in-memory workspaces und background processing dort dokumentiert sein sollte. Der Besuch von
ArcGIS Resources <\/A> bringt mich mit einem Klick zur Hilfe für die neueste Version von ArcGIS. Ein wenig Herumstöbern führt mich zur dauerhaften URL für die ArcGIS 10.2\/_10.2.1\/_10.2.2 Hilfe<\/A>. Die Suche nach 'in_memory' liefert einen Link zu ArcGIS Help 10.2 - Using in-memory workspace<\/A>, was ein guter Ausgangspunkt zu sein scheint. Die Seite ist zu lang und hat zu viele Informationen für Screenshots, aber ich werde unten einige wichtige Auszüge einfügen.<\/P><\/P>
- ArcGIS stellt einen in-memory workspace bereit, in den Ausgabe-Feature-Classes und Tabellen geschrieben werden können. Das Schreiben von Geoverarbeitungs-Ausgaben in den in-memory workspace ist eine Alternative zum Schreiben an einen Speicherort auf der Festplatte oder einem Netzwerkstandort. Das Schreiben von Daten im in-memory workspace ist oft deutlich schneller als das Schreiben in andere Formate wie eine Shapefile oder Geodatabase Feature-Class. Allerdings sind Daten, die im in-memory workspace geschrieben werden, temporär und werden gelöscht, wenn die Anwendung geschlossen wird.
Um in den in-memory workspace zu schreiben, verwenden Sie den Pfad in_memory, wie unten dargestellt.<\/SPAN><\/LI>Wenn Daten im in-memory workspace geschrieben werden, wird der physische Arbeitsspeicher (RAM) des Computers verwendet.<\/SPAN><\/LI><\/UL><\/P>Das
Delete<\/A>-Tool kann verwendet werden, um Daten im in-memory workspace zu löschen. Einzelne Tabellen oder Feature-Classes können gelöscht werden oder der gesamte Workspace kann gelöscht werden, um alle Inhalte des Workspaces zu entfernen.<\/SPAN><\/LI>Eine Tabelle, Feature-Class oder ein Raster, das im in-memory workspace geschrieben wurde, hat den Quellstandort GPInMemoryWorkspace.<\/SPAN><\/LI>Sie können den in_memory workspace auch in Python verwenden,
\n<\/>\n<\/>
Das Handbuch stellt klar fest, dass in-memory workspaces genau das sind – im physischen Speicher Ihres Computers – und dass Sie auf den Workspace über den Pfad in_memory zugreifen. Es wird auch angegeben, dass der Pfad in_memory sowohl von Tools als auch von Python unterstützt wird. Zusätzlich wird angegeben, dass in-memory workspaces eine Quellposition von GPInMemoryWorkspace haben. Schließlich wird angegeben, dass das Delete-Tool verwendet werden kann, um einzelne Tabellen oder Feature-Classes aus dem in-memory workspace zu entfernen.
Alles auf der Seite ArcGIS Help 10.2 - Using in-memory workspace<\\/A> macht Sinn und widerspricht sich nicht selbst – bis man es tatsächlich versucht anzuwenden im ArcGIS Desktop 10.x! Ich denke, die Hilfe ist korrekt wenn sie sagt, dass in-memory workspaces Quellpositionen von GPInMemoryWorkspace haben und dass diese Positionen im physischen RAM des Computers gespeichert sind. Darüber hinaus bin ich mir nicht so sicher, weil wir Beispiele gesehen haben, bei denen in_memory zu on-disk führt und nicht immer zu in-memory. Wir sahen auch einen Fall, bei dem das Delete-Tool eine In-Memory-Tabelle nicht löschen konnte – vermutlich weil es sie überhaupt nicht sehen konnte zum Löschen. Noch seltsamer ist, dass das Delete-Tool auch erfolgreich nichts löschte als die In-Memory-Tabelle stattdessen on-disk erstellt wurde.
Die Beispiele im zweiten Teil dieser Serie vermitteln den Eindruck, dass Background Processing beeinflusst wie der Pfad in_memory funktioniert. Überraschenderweise wird Background Processing auf der Hilfeseite für den In-Memory Workspace kein einziges Mal erwähnt. Vielleicht sind die Auswirkungen von Background Processing auf den Pfad in_memory auf den Hilfeseiten für Background Processing dokumentiert. Die Suche nach 'background processing' im Hauptsuchfeld führt zur Seite ArcGIS Help 10.2 - Foreground and background processing<\/><\/> , was als nächster Schritt sinnvoll erscheint. Ähnlich wie bei der Hilfe zum In-Memory Workspace ist diese Hilfeseite zu lang und enthält zu viele Informationen für Screenshots. Hier einige Auszüge:
- Das Background processing Panel ist dort wo Sie steuern können ob ein Tool im Vordergrund oder Hintergrund ausgeführt wird.
Wenn Aktivieren angekreuzt ist führen Tools im Hintergrund aus und Sie können währenddessen weiter mit ArcMap (oder anderen ArcGIS-Anwendungen wie ArcGlobe) arbeiten.
- Background processing kann man sich vorstellen als eine weitere ArcMap-Sitzung auf Ihrem Computer aber ohne geöffnetes ArcMap-Fenster.
Es gibt viel mehr Informationen auf der Seite als hier angegeben aber keine davon bezieht sich auf In-Memory Workspaces. Tatsächlich werden 'in-memory' und 'in_memory' während der gesamten Dokumentation kein einziges Mal erwähnt. Die ArcGIS Help 10.2 - Background Geoprocessing (64-bit)<\/> ist genauso – keiner der Begriffe wird erwähnt. Da der zweite Teil dieser Serie klar zeigt dass Background Processing die Funktionalität bei Verwendung von in_memory mit Python-Code und ArcGIS-Tools beeinflusst scheint es merkwürdig dass keine der beiden Hauptseiten zum Thema Background Processing diesen Begriff erwähnt.
If the main or introductory help pages for in-memory workspaces and background processing don't address what we are seeing maybe the information is buried on a help page about a related topic. Looking at the
Managing intermediate (scratch) data in shared model and tools page "you can also write intermediate data to the in-memory workspace." That said no reference to background processing at all. The
A quick tour of managing intermediate data is the same i.e., speaks to using the memory workspaces but doesn't mention anything about Background Processing Searching on Background processing instead of memory or memory yields similar results about speaking to one and not the other Interestingly the
Guidelines for arcpy.mapping (arcpy.mapping) page has a statement:
- To Verwenden Sie das Schlüsselwort CURRENT innerhalb eines Skript-Tools, muss die Hintergrundverarbeitung deaktiviert sein. Die Hintergrundverarbeitung führt alle Skripte so aus, als ob sie als eigenständige Skripte außerhalb einer ArcGIS-Anwendung ausgeführt würden, und aus diesem Grund funktioniert CURRENT nicht, wenn die Hintergrundverarbeitung aktiviert ist.<\/SPAN><\/LI><\/UL>
<\/P>
Obwohl dies nicht direkt In-Memory-Arbeitsbereiche erwähnt, deutet es darauf hin, dass die Hintergrundverarbeitung möglicherweise beeinflusst, wie bestimmter Code in ArcGIS Desktop funktioniert. Ich weiß, das ist vage, aber im Handbuch finde ich wirklich nichts anderes.<\/P>
<\/P>
Vielleicht ist die Dokumentation vollständig und es gibt nur einen Fehler, der alle Diskrepanzen verursacht, die wir im zweiten Teil dieser Serie gesehen haben. Leider liefert die Suche nach veröffentlichten Fehlern für 'in_memory' und 'in-memory' nicht viel, 4 Treffer, und definitiv nichts, was erklärt, was wir gesehen haben.<\/P>
<\/P>
Lassen Sie uns in den Foren nachsehen, ob jemand diese Frage schon einmal gestellt hat. Interessanterweise hat jemand vor mehr als 2 Jahren im Grunde dieselbe Frage gestellt: Es scheint, dass "in_memory" nicht wirklich im Speicher ist<\/A>. Es gab im Forum im Wesentlichen zwei Antworten, und keine von ihnen scheint direkt von Esri-Mitarbeitern zu stammen.<\/P>
<\/P>
Die erste Antwort ist etwas unvollständig, da sie nicht wirklich sagt, ob die Aussage für Vordergrund- oder Hintergrundverarbeitung gilt oder für beide. Da der ursprüngliche Poster nicht sagte, ob die Hintergrundverarbeitung aktiviert war oder nicht, gehe ich davon aus, dass Standardeinstellungen verwendet werden, was Hintergrundverarbeitung bedeutet. Ich habe eine schnelle Überprüfung mit dem Tool Mosaic to New Raster durchgeführt, mit Hintergrundverarbeitung ein- und ausgeschaltet. Mit deaktivierter Hintergrundverarbeitung verbrauchte das in_memory Raster ungefähr 400 MB RAM. Mit aktivierter Hintergrundverarbeitung verbrauchte das in_memory Raster etwa 120 MB. Es könnte eine Speicherabbildung stattfinden, wenn die Hintergrundverarbeitung aktiviert ist, aber es lädt sicherlich nicht alles in den RAM und hält nur eine Referenz auf der Festplatte.<\/P>
<\/P>
Die zweite Antwort macht Sinn, ist aber nicht ganz genau, weil wir Werkzeuge finden können, bei denen in_memory immer noch im Speicher bedeutet, selbst wenn die Hintergrundverarbeitung aktiviert ist. CreateFeatureclass könnte so funktionieren wie in der Antwort beschrieben, aber CopyFeatures sicherlich nicht. Also wie wissen wir, welche Werkzeuge auf welche Weise funktionieren?<\/P>
<\/P>
In-Memory-Arbeitsbereiche haben sich nicht nur bei ArcGIS 10.0 geändert, es scheint auch so zu sein, dass Esris Online-Dokumentation keine der Verhaltensänderungen wirklich anspricht. Es ist an der Zeit einen Schritt zurückzutreten und darüber nachzudenken, was das alles für Endbenutzer und Entwickler bedeutet, die versuchen, die Software zu verwenden.<\/P><\/BODY><\/HTML>