<\/HEAD>
Dit is het derde deel in een serie van vier over de uitdagingen bij het benoemen van nieuwe functies in softwaretoepassingen; met name de gevolgen wanneer de naamgeving tekortschiet. Het eerste deel in de serie <\/A>bekijkt een geval waarin de naam van een nieuwe functie duidelijk en beknopt het gedrag van die functie beschrijft. Het tweede deel in de serie<\/A> bekijkt datzelfde geval wanneer nieuwere functionaliteit het oorspronkelijke gedrag van die nieuwe functionaliteit verandert. Het derde deel in de serie<\/STRONG> bekijkt hoe de documentatie is aangepast om deze gewijzigde functionaliteit te adresseren. En tot slot bespreekt het vierde deel in de serie <\/A>wat dit allemaal betekent voor eindgebruikers en ontwikkelaars.<\/EM><\/P><\/P>
Het eerste deel in deze serie (
What's in a Name: When in_memory = In-memory<\/A>) bekeek de introductie van de in-memory workspace en maakte een paar basisvoorbeelden om het uit te proberen. In principe werkte het en betekende de nieuwe in_memory functie ook echt in-memory. Het tweede deel in deze serie (What's in a Name: When in_memory != In-memory<\/A>) bekijkt diezelfde voorbeelden en ziet hoe ze uitpakken na de introductie van ArcPy en Background Processing. Eerlijk gezegd is het moeilijk te zeggen hoe die voorbeelden zijn uitgepakt. De beleefde manier om het te zeggen is misschien "gemengde resultaten." Hoewel er gevallen waren waarin in_memory leek te betekenen dat het in-memory was, waren er ook gevallen waarin in_memory leek op on-disk te zijn. Zelfs wanneer in_memory leek in-memory te zijn, waren er enkele vreemde gedragingen met sommige tools/functies.<\/P><\/P>
Om een beter idee te krijgen van wat er aan de hand kan zijn, moet ik even naar de ondersteunende documentatie kijken, en de online handleiding is net zo'n goede plek om te beginnen. Aangezien het gedrag dat we zagen in het tweede deel van deze serie begint met ArcGIS 10.0 en voortduurt tot ArcGIS 10.2.2, spring ik gewoon naar de ArcGIS 10.2.2 handleiding met de veronderstelling dat het nieuwste en beste met betrekking tot in-memory workspaces en background processing daar gedocumenteerd zou moeten zijn. Bezoek aan
ArcGIS Resources <\/A>brengt me met één klik naar de Help voor de nieuwste versie van ArcGIS. Een beetje rondkijken leidt me naar de permanente URL voor de ArcGIS 10.2\/ 10.2.1\/ 10.2.2 Help<\/A>. Zoeken op 'in_memory' geeft een link naar ArcGIS Help 10.2 - Using in-memory workspace<\/A>, wat een goede plek lijkt om te beginnen. De pagina is te lang en heeft te veel te zeggen voor screenshots, maar ik zal hieronder een paar belangrijke fragmenten plakken.<\/P><\/P>
- ArcGIS biedt een in-memory workspace waar output feature classes en tabellen kunnen worden geschreven. Het schrijven van geoprocessing output naar de in-memory workspace is een alternatief voor het schrijven van output naar een locatie op schijf of een netwerklocatie. Gegevens schrijven naar de in-memory workspace is vaak aanzienlijk sneller dan schrijven naar andere formaten zoals een shapefile of geodatabase feature class. Echter, gegevens geschreven naar de in-memory workspace zijn tijdelijk en worden verwijderd wanneer de applicatie wordt gesloten.
Om naar de in-memory workspace te schrijven, gebruik je het pad in_memory, zoals hieronder geïllustreerd.<\/SPAN><\/LI>Wanneer gegevens worden geschreven naar de in-memory workspace, wordt het fysieke geheugen (RAM) van de computer gebruikt.<\/SPAN><\/LI><\/UL><\/P>De
Delete<\/A> tool kan worden gebruikt om gegevens te verwijderen uit de in-memory workspace. Individuele tabellen of feature classes kunnen worden verwijderd, of de gehele workspace kan worden verwijderd om alle inhoud van de workspace leeg te maken.<\/SPAN><\/LI>Een tabel, feature class of raster geschreven naar de in-memory workspace zal als bronlocatie GPInMemoryWorkspace hebben.<\/SPAN><\/LI>Je kunt ook gebruik maken van de in_memory workspace in Python, .
De handleiding stelt duidelijk dat in-memory workspaces precies dat zijn, namelijk fysiek geheugen op je computer, en dat je toegang krijgt tot die workspace via in_memory. Ook stelt hij dat het pad in_memory wordt ondersteund door tools en Python. Daarnaast stelt hij dat in-memory workspaces een bronlocatie hebben genaamd GPInMemoryWorkspace. Tot slot stelt hij dat je met behulp van de Delete tool individuele tabellen of feature classes uit de in-memory workspace kunt verwijderen.
Alles wat behandeld wordt op de ArcGIS Help 10.2 - Using in-memory workspace-pagina is logisch en consistent, totdat je het daadwerkelijk probeert toe te passen in ArcGIS Desktop 10.x! Ik denk dat de Help correct is wanneer hij stelt dat in-memory workspaces bronlocaties hebben genaamd GPInMemoryWorkspace en dat die locaties opgeslagen zijn in het fysieke RAM-geheugen van de computer. Verder ben ik niet zo zeker omdat we voorbeelden zagen waarbij in_memory leidde tot on-disk opslag, niet altijd tot echt geheugen (in-memory). We zagen ook een geval waarbij de Delete tool faalde bij het verwijderen van een tabel uit memory, vermoedelijk omdat hij die tabel eerst niet kon zien om hem te verwijderen. Nog vreemder was dat dezelfde Delete tool succesvol niets verwijderde toen diezelfde tabel on-disk was gemaakt i.p.v. echt geheugen (in-memory).
De voorbeelden uit het tweede deel van deze serie geven de indruk dat Background Processing invloed heeft op hoe het pad in_memory werkt. Verrassend genoeg wordt Background Processing niet één keer genoemd op de Help-pagina voor in-memory workspaces. Misschien zijn effecten van Background Processing op het pad in_memory wel gedocumenteerd op Help-pagina's over Background Processing zelf. Zoeken op 'background processing' via de hoofdzoekbalk levert ArcGIS Help 10.2 - Foreground and background processing, wat een goede volgende stap lijkt. Net als bij hulp over memory workspaces is deze pagina ook te lang en bevat teveel informatie voor screenshots. Hier enkele fragmenten:
- Het Background processing-paneel is waar je bepaalt of een tool wordt uitgevoerd op voorgrond- of achtergrondmodus.
Als Enable aangevinkt is, worden tools op achtergrond uitgevoerd en kun je blijven werken met ArcMap (of andere ArcGIS-applicaties zoals ArcGlobe) terwijl die tool draait.
- Background processing kan worden gezien als een andere ArcMap-sessie die draait op je computer maar zonder dat er een ArcMap-venster openstaat.
Er staat veel meer informatie op die pagina dan hierboven weergegeven, maar niets daarvan heeft betrekking op memory workspaces. Sterker nog, 'in-memory' noch 'in_memory' worden één keer genoemd door alle documentatie heen. De ArcGIS Help 10.2 - Background Geoprocessing (64-bit) is hetzelfde verhaal: geen van beide termen wordt genoemd. Gezien het tweede deel van deze serie duidelijk laat zien dat Background processing invloed heeft op hoe je met Python code en ArcGIS tools gebruik maakt van in_memory, lijkt het vreemd dat geen van beide hoofd-pagina's over Background processing dit begrip ook maar noemen.
Als hoofd- of introductie-help-pagina's over memory workspaces en background processing niet behandelen wat wij zien, dan zit die informatie misschien verborgen op een help-pagina over een gerelateerd onderwerp. Kijkend naar Managing intermediate (scratch) data in shared model and tools-pagina staat "je kunt ook tussentijdse data schrijven naar de memory workspace." Dat gezegd hebbende wordt background processing nergens genoemd. A quick tour of managing intermediate data is hetzelfde verhaal: spreekt over gebruik maken van memory workspaces maar noemt niets over Background Processing.
Zoeken op Background processing i.p.v. on_memory of memory levert vergelijkbare resultaten op waarbij slechts één onderwerp besproken wordt maar niet beide tegelijk.
Interessant genoeg bevat Guidelines for arcpy.mapping (arcpy.mapping)-pagina wel een verklaring:
To gebruik het CURRENT trefwoord binnen een scripttool, achtergrondverwerking moet worden uitgeschakeld. Achtergrondverwerking voert alle scripts uit alsof ze als zelfstandige scripts buiten een ArcGIS-toepassing worden uitgevoerd, en om deze reden werkt CURRENT niet met ingeschakelde achtergrondverwerking.<\/SPAN><\/LI><\/UL><\/P>Hoewel dit niet direct in-memory werkruimten noemt, suggereert het wel dat Achtergrondverwerking mogelijk de werking van bepaalde code in ArcGIS Desktop verandert. Vaag, ik weet het, maar er is echt niet veel anders te vinden in de handleiding.<\/P><\/P>Misschien is de documentatie compleet en is er gewoon een bug die alle discrepanties veroorzaakt die we zagen in het tweede deel van deze serie. Helaas levert zoeken in de gepubliceerde bugs naar 'in_memory' en 'in-memory' niet veel op, 4 treffers, en zeker niets dat verklaart wat we hebben gezien.<\/P><\/P>Laten we naar de forums gaan om te zien of iemand deze vraag eerder heeft gesteld. Interessant genoeg heeft iemand eigenlijk dezelfde vraag gesteld, en dat meer dan 2 jaar geleden: Het lijkt erop dat "in_memory" niet echt in geheugen is<\/A>. Er waren/bestonden eigenlijk twee reacties in de forumdraad, en geen van beide lijken rechtstreeks van Esri-medewerkers te zijn.<\/P>
<\/P>
De eerste reactie is een beetje onvolledig omdat het niet echt zegt of de uitspraak geldt voor voorgrond- of achtergrondverwerking, of beide. Aangezien de oorspronkelijke poster niet zei of Achtergrondverwerking was ingeschakeld, ga ik ervan uit dat standaardinstellingen worden gebruikt, wat betekent achtergrondverwerking. Ik heb snel gecontroleerd met de Mosaic to New Raster tool met Achtergrondverwerking aan en uitgeschakeld. Met Achtergrondverwerking uitgeschakeld gebruikte de in_memory raster ongeveer 400 MB RAM. Met Achtergrondverwerking ingeschakeld gebruikte de in_memory raster ongeveer 120 MB. Er kan enige geheugenmapping plaatsvinden wanneer Achtergrondverwerking is ingeschakeld, maar het laadt zeker niet alles in RAM en houdt alleen een verwijzing op schijf bij.<\/P>
<\/P>
De tweede reactie is logisch, maar niet helemaal accuraat omdat we tools kunnen vinden waarbij in_memory nog steeds betekent in geheugen zelfs wanneer Achtergrondverwerking is ingeschakeld. CreateFeatureclass werkt misschien zoals de reactie stelt, maar CopyFeatures zeker niet. Dus, hoe weten we welke tools op welke manier werken? <\/P>
<\/P>
Niet alleen zijn in-memory werkruimten veranderd bij ArcGIS 10.0, het lijkt erop dat Esri's online documentatie eigenlijk geen van de gedragswijzigingen behandelt. Het is tijd om een stap terug te doen en na te denken over wat dit allemaal betekent voor eindgebruikers en ontwikkelaars die proberen de software te gebruiken.<\/P><\/BODY><\/HTML>