<\/HEAD>
Toto je třetí část ze čtyřdílné série o výzvách pojmenovávání nových funkcí v softwarových aplikacích; zejména o důsledcích, když pojmenování selhává. První část série <\/A>se zabývá případem, kdy název nové funkce jasně a stručně popisuje chování této funkce. Druhá část série<\/A> se zabývá stejným případem, kdy novější funkčnost mění původní chování této nové funkčnosti. Třetí část série<\/STRONG> se zaměřuje na to, jak se dokumentace změnila, aby řešila tuto změněnou funkčnost. A nakonec čtvrtá část série <\/A>diskutuje, co to všechno znamená pro koncové uživatele a vývojáře.<\/EM><\/P><\/P>
První část této série (
Co je v názvu: Když in_memory = In-memory<\/A>) se zabývala zavedením in-memory workspace a vytvořila několik základních příkladů k jeho ověření. V podstatě to fungovalo a nová funkce in_memory znamenala in-memory. Druhá část této série (Co je v názvu: Když in_memory != In-memory<\/A>) se zabývá těmi samými příklady a sleduje, jak dopadly po zavedení ArcPy a Background Processing. Upřímně řečeno, je těžké říct, jak tyto příklady dopadly. Zdvořilý způsob, jak to říct, by mohl být "smíšené výsledky." Ačkoli byly případy, kdy in_memory vypadalo jako in-memory, byly také případy, kdy in_memory vypadalo jako on-disk. Dokonce i když se in_memory zdálo být in-memory, objevily se některé zvláštní chování u některých nástrojů/funkcí.<\/P><\/P>
Pro lepší představu o tom, co se může dít, potřebuji trochu prozkoumat podpůrnou dokumentaci a online manuál je stejně dobré místo jako jiné pro začátek. Protože chování, které jsme viděli ve druhé části této série začíná s ArcGIS 10.0 a přetrvává až do ArcGIS 10.2.2, skočím rovnou do manuálu ArcGIS 10.2.2 s předpokladem, že nejnovější informace o in-memory workspaces a background processing by měly být tam zdokumentovány. Návštěva
ArcGIS Resources <\/A> mě jedním kliknutím dostane k nápovědě pro nejnovější verzi ArcGIS. Trocha hledání mě vede k nalezení trvalé URL pro ArcGIS 10.2\/_10.2.1\/_10.2.2 Help<\/A>. Vyhledávání 'in_memory' přináší odkaz na ArcGIS Help 10.2 - Použití in-memory workspace<\/A>, což vypadá jako dobré místo pro začátek. Stránka je příliš dlouhá a má příliš mnoho informací na screenshoty, ale níže vložím několik důležitých úryvků.<\/P><\/P>
- ArcGIS poskytuje in-memory workspace, kam lze zapisovat výstupní třídy prvků a tabulky. Zápis geoprocessingového výstupu do in-memory workspace je alternativou k zápisu výstupu na disk nebo síťové umístění. Zápis dat do in-memory workspace je často výrazně rychlejší než zápis do jiných formátů jako shapefile nebo geodatabázová třída prvků. Nicméně data zapsaná do in-memory workspace jsou dočasná a budou smazána po zavření aplikace.
Pro zápis do in-memory workspace použijte cestu in_memory, jak je ilustrováno níže.<\/SPAN><\/LI>Když jsou data zapsána do in-memory workspace, spotřebovává se fyzická paměť počítače (RAM).<\/SPAN><\/LI>Nástroj
Delete<\/A> lze použít ke smazání dat v in-memory workspace. Lze smazat jednotlivé tabulky nebo třídy prvků nebo celý workspace pro vyčištění veškerého obsahu workspace.<\/SPAN><\/LI>Tabulka, třída prvků nebo rastrový soubor zapsaný do in-memory workspace bude mít zdrojovou lokaci GPInMemoryWorkspace.<\/SPAN><\/LI>In_memory workspace můžete používat také v Pythonu,
Manuál jasně uvádí, že in-memory workspaces jsou právě to – ve fyzické paměti vašeho počítače – a že přistupujete k workspace pomocí in_memory. Také uvádí, že cesta in_memory je podporována v nástrojích i Pythonu. Navíc uvádí, že in-memory workspaces mají zdrojovou lokaci GPInMemoryWorkspace. Nakonec uvádí, že nástroj Delete lze použít ke smazání jednotlivých tabulek nebo tříd prvků z in-memory workspace.
Vše pokryté na stránce ArcGIS Help 10.2 - Použití in-memory workspace<\/> dává smysl a souhlasí samo se sebou až do chvíle, kdy to skutečně zkusíte použít v ArcGIS Desktop 10.x! Myslím si, že nápověda má pravdu když uvádí, že in-memory workspaces mají zdrojovou lokaci GPInMemoryWorkspace a že tyto lokace jsou uloženy ve fyzické RAM počítače. Dále si však nejsem tak jistý protože jsme viděli příklady kde in_memory může vést k on-disk místo vždy k in-memory. Také jsme viděli případ kdy nástroj Delete selhal při mazání tabulky v paměti (in-memory), pravděpodobně proto, že ji nemohl vůbec najít k odstranění. Ještě podivnější je fakt, že nástroj Delete úspěšně nesmazal nic i když byla tabulka vytvořena on-disk místo v paměti.
Příklady ve druhé části této série dávají dojem, že Background Processing ovlivňuje fungování cesty in_memory. Překvapivě není Background Processing ani jednou zmíněn na stránce nápovědy pro in-memory workspaces. Možná jsou účinky Background Processing na cestu in_memory zdokumentovány na stránkách nápovědy pro Background Processing. Vyhledávání 'background processing' v hlavním vyhledávacím poli přináší ArcGIS Help 10.2 - Foreground and background processing<\/> , což vypadá jako dobré místo pro další krok. Podobně jako u nápovědy pro in-memory workspace je tato stránka nápovědy příliš dlouhá a obsahuje příliš mnoho informací na screenshoty. Zde jsou dva úryvky:
- Panel Background processing je místo, kde ovládáte zda nástroj běží v režimu foreground nebo background.
Pokud je zaškrtnuto Enable (povolit), nástroje běží na pozadí a můžete pokračovat v práci s ArcMap (nebo jinými aplikacemi ArcGIS jako ArcGlobe) zatímco nástroj běží.
- Background processing lze považovat za další relaci ArcMap běžící na vašem počítači bez otevřeného okna ArcMap.<\/>
Na stránce je mnohem více informací než zde uvádím výše, ale žádná z nich nesouvisí s in-memory workspaces. Ve skutečnosti nejsou termíny 'in-memory' ani 'in_memory' nikde v dokumentaci zmíněny ani jednou. Stejně tak ArcGIS Help 10.2 - Background Geoprocessing (64-bit)<\/> nezmiňuje tyto termíny vůbec. Vzhledem k tomu že druhá část této série jasně ukazuje vliv Background processing na funkčnost používání in_memory s Python kódem a nástroji ArcGIS je poněkud zvláštní že ani jedna ze dvou hlavních stránek o Background processing tento termín nezmiňuje.
Pokud hlavní nebo úvodní stránky nápovědy pro in-memory workspaces a background processing neřeší to co vidíme možná jsou informace ukryty na stránce nápovědy týkající se souvisejícího tématu. Na stránce Správa mezilehlých (scratch) dat ve sdílených modelech a nástrojích<\/> se uvádí "můžete také zapisovat mezilehlá data do in-memory workspace." Nicméně zde není žádná zmínka o background processing vůbec. Stránka Rychlá prohlídka správy mezilehlých dat<\/> je podobná – mluví o používání in-memory workspaces ale nezmiňuje nic o Background Processing. Vyhledávání na Background processing místo on_memory nebo 'in_memory' přináší podobné výsledky – mluví o jednom ale ne o druhém. Zajímavé je že stránka Pokyny pro arcpy.mapping (arcpy.mapping)<\/> obsahuje následující tvrzení:
- K použijte klíčové slovo CURRENT v rámci nástroje skriptu, musí být zakázáno pozadí zpracování. Pozadí zpracování spouští všechny skripty, jako by byly spuštěny jako samostatné skripty mimo aplikaci ArcGIS, a z tohoto důvodu CURRENT nebude fungovat, pokud je pozadí zpracování povoleno.<\/SPAN><\/LI><\/UL><\/P>Ačkoli to přímo nezmiňuje in-memory pracovní prostory, naznačuje to, že Background Processing může nebo mění způsob, jakým určitý kód funguje v ArcGIS Desktop. Slabé, vím, ale opravdu není mnoho dalšího, co bych mohl najít v manuálu.<\/P><\/P>Možná je dokumentace kompletní a existuje jen chyba, která způsobuje všechny nesrovnalosti, které jsme viděli ve druhé části této série. Bohužel vyhledávání publikovaných chyb pro 'in_memory' a 'in-memory' nepřináší mnoho výsledků, 4 zásahy, a rozhodně nic, co by vysvětlovalo to, co jsme viděli.<\/P><\/P>Pojďme na fóra zjistit, jestli někdo tuto otázku již položil. Zajímavé je, že někdo položil prakticky stejnou otázku před více než 2 lety: Zdá se, že "in_memory" není opravdu v paměti<\/A>. V diskusním vlákně byly v podstatě dvě odpovědi a žádná z nich se nezdá být přímo od zaměstnanců Esri.<\/P>
<\/P>
První odpověď je trochu neúplná, protože vlastně neříká, zda se tvrzení vztahuje na foreground nebo background processing, nebo obojí. Protože původní autor nezmínil, zda bylo Background Processing povoleno či nikoliv, budu předpokládat výchozí nastavení, což znamená pozadí zpracování. Provedl jsem rychlou kontrolu pomocí nástroje Mosaic to New Raster s Background Processing zapnutým i vypnutým. Při vypnutém Background Processing spotřeboval in_memory raster přibližně 400 MB RAM. Při zapnutém Background Processing spotřeboval in_memory raster asi 120 MB. Může docházet k nějakému mapování paměti při povoleném Background Processing, ale rozhodně to nenačítá vše do RAM a pouze drží odkaz na disku.<\/P>
<\/P>
Druhá odpověď dává smysl, ale není úplně přesná, protože můžeme najít nástroje, kde in_memory stále znamená v paměti i když je Background Processing povolen. CreateFeatureclass může fungovat tak, jak odpověď uvádí, ale CopyFeatures rozhodně ne. Takže jak víme, které nástroje fungují jak?<\/P>
<\/P>
Nejenže se in-memory pracovní prostory změnily v ArcGIS 10.0, ale zdá se, že online dokumentace Esri skutečně neřeší žádné změny chování. Je čas udělat krok zpět a zamyslet se nad tím, co to všechno znamená pro koncové uživatele a vývojáře snažící se software používat.<\/P><\/BODY><\/HTML>