<\/HEAD>
Esta é a terceira parte de uma série em quatro partes sobre os desafios de nomear novos recursos em aplicações de software; particularmente, as consequências quando a nomeação não é adequada. A primeira parte da série <\/A>analisa um caso em que o nome de um novo recurso descreve clara e sucintamente o comportamento desse recurso. A segunda parte da série<\/A> analisa esse mesmo caso quando funcionalidades mais recentes alteram o comportamento original dessa nova funcionalidade. A terceira parte da série<\/STRONG> examina como a documentação foi alterada para abordar essa funcionalidade modificada. E finalmente, a quarta parte da série <\/A>discute o que tudo isso significa para usuários finais e desenvolvedores.<\/EM><\/P><\/P>
A primeira parte desta série (
O que há em um Nome: Quando in_memory = In-memory<\/A>) analisou a introdução do espaço de trabalho in-memory e criou alguns exemplos básicos para testá-lo. Basicamente, funcionou e o novo recurso in_memory significava in-memory. A segunda parte desta série (O que há em um Nome: Quando in_memory != In-memory<\/A>) examina esses mesmos exemplos e vê como eles se comportam após a introdução do ArcPy e do Background Processing. Honestamente, é difícil dizer como esses exemplos se saíram. A forma educada de dizer pode ser "resultados mistos." Embora houvesse casos em que in_memory parecia ser in-memory, também houve casos em que in_memory parecia estar no disco (on-disk). Mesmo quando in_memory parecia ser in-memory, houve alguns comportamentos estranhos com algumas das ferramentas/funções.<\/P><\/P>
Para entender melhor o que pode estar acontecendo, preciso olhar um pouco para a documentação de suporte, e o manual online é tão bom quanto qualquer outro lugar para começar. Como os comportamentos que vimos na segunda parte desta série começam com o ArcGIS 10.0 e persistem até o ArcGIS 10.2.2, vou pular diretamente para o manual do ArcGIS 10.2.2 assumindo que as informações mais recentes sobre espaços de trabalho in-memory e processamento em segundo plano devem estar documentadas lá. Visitar
Recursos ArcGIS <\/A> me leva com um clique à Ajuda para a versão mais recente do ArcGIS. Um pouco de exploração me levou a encontrar a URL persistente para a Ajuda do ArcGIS 10.2\/, 10.2.1\/, 10.2.2<\/A>. Pesquisar por 'in_memory' traz um link para Ajuda do ArcGIS 10.2 - Usando espaço de trabalho in-memory<\/A>, que parece um bom lugar para começar. A página é muito longa e tem muitas informações para capturas de tela, mas vou colar alguns trechos importantes abaixo.<\/P><\/P>
- O ArcGIS fornece um espaço de trabalho in-memory onde classes de feição e tabelas de saída podem ser gravadas. Gravar saída de geoprocessamento no espaço de trabalho in-memory é uma alternativa a gravar saída em um local no disco ou em uma localização na rede. Gravar dados no espaço de trabalho in-memory é frequentemente significativamente mais rápido do que gravar em outros formatos, como shapefile ou classe de feição geodatabase. No entanto, os dados gravados no espaço de trabalho in-memory são temporários e serão excluídos quando o aplicativo for fechado.
Para gravar no espaço de trabalho in_memory, use o caminho in_memory, conforme ilustrado abaixo.<\/SPAN><\/LI>Quando os dados são gravados no espaço de trabalho in-memory, a memória física do computador (RAM) é consumida.<\/SPAN><\/LI><\/UL><\/P>A ferramenta
Delete<\/A> pode ser usada para excluir dados no espaço de trabalho in-memory. Tabelas individuais ou classes de feição podem ser excluídas, ou todo o espaço de trabalho pode ser excluído para limpar todo o conteúdo do espaço.<\/SPAN><\/LI>Uma tabela, classe de feição ou raster gravado no espaço de trabalho in_memory terá a localização fonte GPInMemoryWorkspace.<\/SPAN><\/LI>Você também pode usar o espaço de trabalho in_memory no Python, também,
O manual afirma claramente que espaços de trabalho in-memory são exatamente isso, na memória física do seu computador, e que você acessa o espaço usando in_memory. Também afirma que o caminho in_memory é suportado em ferramentas e Python. Além disso, afirma que espaços de trabalho in-memory têm uma localização fonte GPInMemoryWorkspace. Finalmente, afirma que a ferramenta Delete pode ser usada para remover tabelas individuais ou classes de feição do espaço de trabalho in_memory.
Tudo coberto na Ajuda do ArcGIS 10.2 - Usando espaço de trabalho in-memory faz sentido e concorda consigo mesmo até você realmente tentar aplicá-lo no ArcGIS Desktop 10.x! Acho que a Ajuda está correta ao afirmar que espaços de trabalho in-memory têm localizações fonte GPInMemoryWorkspace e que essas localizações são armazenadas na RAM física do computador. Além disso, não tenho tanta certeza porque vimos exemplos onde in_memory pode levar ao on-disk, nem sempre ao in-memory. Também vimos um caso onde a ferramenta Delete falhou ao excluir uma tabela in_memory, aparentemente porque não conseguiu vê-la para excluí-la.
Ainda mais estranho, a ferramenta Delete também excluiu com sucesso nada quando a tabela in_memory foi criada on-disk em vez de in-memory.
Os exemplos na segunda parte desta série dão a impressão que Background Processing afeta como o caminho in_memory funciona. Surpreendentemente, Background Processing nem é mencionado uma vez na página da Ajuda para espaços de trabalho in-memory. Talvez os efeitos do Background Processing no caminho in_memory estejam documentados nas páginas da Ajuda para Background Processing. Pesquisar por 'background processing' na barra principal traz Ajuda do ArcGIS 10.2 - Processamento em primeiro plano e segundo plano, que parece um bom próximo passo. Similar à ajuda dos espaços de trabalho in-memory, esta página é muito longa e tem muita informação para capturas.
Olhando alguns trechos:
- O painel Background processing é onde você controla se uma ferramenta executa no modo foreground ou background.
Se Habilitar estiver marcado, as ferramentas executam em background e você pode continuar trabalhando com ArcMap (ou outras aplicações ArcGIS como ArcGlobe) enquanto a ferramenta executa.
- Background processing pode ser pensado como outra sessão do ArcMap rodando no seu computador mas sem a janela do ArcMap aberta.
Há muito mais informação na página além do que forneci acima, mas nada tem relação com espaços de trabalho in-memory. De fato, 'in-memory' e 'in_memory' nem sequer são referenciados uma vez em toda documentação. A Ajuda do ArcGIS 10.2 - Geoprocessamento em segundo plano (64-bit) é igual, ou seja, nenhum dos termos é mencionado uma vez. Dado que a segunda parte desta série mostra claramente que Background processing afeta a funcionalidade do uso do in_memory com código Python e ferramentas ArcGIS, parece estranho que nenhuma das duas principais páginas sobre Background processing mencione o termo.
Se as páginas principais ou introdutórias da ajuda para espaços de trabalho in-memory e processamento em segundo plano não abordam o que estamos vendo, talvez as informações estejam enterradas numa página relacionada.
Olhando na página Gerenciando dados intermediários (scratch) em modelos compartilhados e ferramentas, "você também pode gravar dados intermediários no espaço de trabalho in-memory." Dito isso, nenhuma referência ao Background processing.
Uma rápida visita à página Um tour rápido sobre gerenciamento de dados intermediários é igual: fala sobre uso dos espaços de trabalho in-memory mas não menciona nada sobre Background Processing.
Pesquisar por Background processing ao invés de 'in-memory' ou 'in_memory' traz resultados similares falando sobre um mas não sobre o outro.
Curiosamente, a página Diretrizes para arcpy.mapping (arcpy.mapping) tem uma declaração:
- Para use a palavra-chave CURRENT dentro de uma ferramenta de script, o processamento em segundo plano deve ser desativado. O processamento em segundo plano executa todos os scripts como se eles estivessem sendo executados como scripts independentes fora de um aplicativo ArcGIS, e por essa razão, CURRENT não funcionará com o processamento em segundo plano ativado.<\/SPAN><\/LI><\/UL><\/P>Embora isso não mencione diretamente os workspaces in-memory, sugere que o Processamento em Segundo Plano pode ou altera como certo código funciona no ArcGIS Desktop. Fraco, eu sei, mas realmente não há muito mais que eu possa encontrar no manual.<\/P><\/P>Talvez a documentação esteja completa e haja apenas um bug que está causando todas as discrepâncias que vimos na segunda parte desta série. Infelizmente, pesquisar os bugs publicados por 'in_memory' e 'in-memory' não traz muito, 4 resultados, e definitivamente nada para explicar o que vimos.<\/P><\/P>Vamos para os fóruns ver se alguém já fez essa pergunta antes. Curiosamente, alguém fez basicamente a mesma pergunta, e há mais de 2 anos: Parece que "in_memory" não está realmente na memória<\/A>. Houve basicamente duas respostas no tópico do fórum, e nenhuma delas parece ser diretamente da equipe Esri.<\/P>
<\/P>
A primeira resposta é um pouco incompleta porque não diz realmente se a afirmação se aplica ao processamento em primeiro plano ou em segundo plano, ou ambos. Como o autor original não disse se o Processamento em Segundo Plano estava ativado ou não, vou assumir que as configurações padrão estão sendo usadas, o que significa processamento em segundo plano. Fiz uma verificação rápida usando a ferramenta Mosaic to New Raster com o Processamento em Segundo Plano ligado e desligado. Com o Processamento em Segundo Plano desligado, o raster in_memory consumiu cerca de 400 MB de RAM. Com o Processamento em Segundo Plano ligado, o raster in_memory consumiu cerca de 120 MB. Pode haver algum mapeamento de memória ocorrendo quando o Processamento em Segundo Plano está ativado, mas certamente não está carregando tudo na RAM e apenas mantendo uma referência no disco.<\/P>
<\/P>
A segunda resposta faz sentido, mas não é completamente precisa porque podemos encontrar ferramentas onde in_memory ainda significa in-memory mesmo quando o Processamento em Segundo Plano está ativado. CreateFeatureclass pode funcionar da maneira que a resposta afirma, mas CopyFeatures certamente não. Então, como sabemos quais ferramentas funcionam de qual maneira?<\/P>
<\/P>
Não só os workspaces in-memory mudaram no ArcGIS 10.0, como também parece que a documentação online da Esri realmente não aborda nenhuma das mudanças no comportamento. É hora de dar um passo atrás e pensar sobre o que tudo isso significa para usuários finais e desenvolvedores tentando usar o software.<\/P><\/BODY><\/HTML>