<\/HEAD>
Ceci est la troisième partie d'une série en quatre volets sur les défis de nommer de nouvelles fonctionnalités dans les applications logicielles ; en particulier, les conséquences lorsque le nommage est insuffisant. La première partie de la série <\/A>examine un cas où le nom d'une nouvelle fonctionnalité décrit clairement et succinctement le comportement de cette fonctionnalité. La deuxième partie de la série<\/A> examine ce même cas lorsque des fonctionnalités plus récentes modifient le comportement original de cette nouvelle fonctionnalité. La troisième partie de la série<\/STRONG> examine comment la documentation a changé pour aborder cette fonctionnalité modifiée. Et enfin, la quatrième partie de la série <\/A>discute de ce que tout cela signifie pour les utilisateurs finaux et les développeurs.<\/EM><\/P><\/P>
La première partie de cette série (
Qu'y a-t-il dans un nom : Quand in_memory = In-memory<\/A>) examinait l'introduction de l'espace de travail in-memory et proposait quelques exemples basiques pour le tester. En gros, cela fonctionnait et la nouvelle fonctionnalité in_memory signifiait bien en mémoire. La deuxième partie de cette série (Qu'y a-t-il dans un nom : Quand in_memory != In-memory<\/A>) examine ces mêmes exemples et voit comment ils évoluent après l'introduction d'ArcPy et du Traitement en arrière-plan (Background Processing). Honnêtement, il est difficile de dire comment ces exemples ont tourné. La manière polie de le dire serait « résultats mitigés ». Bien qu'il y ait eu des cas où in_memory semblait être en mémoire, il y avait aussi des cas où in_memory semblait être sur disque. Même lorsque in_memory semblait être en mémoire, certains comportements étranges apparaissaient avec certains outils/fonctions.<\/P><\/P>
Pour mieux comprendre ce qui pourrait se passer, je dois examiner un peu la documentation d'accompagnement, et le manuel en ligne est un bon point de départ. Puisque les comportements que nous avons vus dans la deuxième partie de cette série commencent avec ArcGIS 10.0 et persistent jusqu'à ArcGIS 10.2.2, je vais directement consulter le manuel ArcGIS 10.2.2 en supposant que les dernières nouveautés concernant les espaces de travail in-memory et le traitement en arrière-plan devraient y être documentées. Visiter
ArcGIS Resources <\/A> me permet en un clic d'accéder à l'aide pour la dernière version d'ArcGIS. Un peu d'exploration m'amène à trouver l'URL persistante pour l'aide ArcGIS 10.2\/_10.2.1\/_10.2.2<\/A>. Une recherche sur 'in_memory' donne un lien vers ArcGIS Help 10.2 - Utilisation de l'espace de travail in-memory<\/A>, qui semble être un bon point de départ. La page est trop longue et contient trop d'informations pour des captures d'écran, mais je vais coller quelques extraits importants ci-dessous.<\/P><\/P>
- ArcGIS fournit un espace de travail in-memory où les classes d'entités et tables de sortie peuvent être écrites. Écrire la sortie du géotraitement dans l'espace de travail in-memory est une alternative à l'écriture sur un emplacement disque ou réseau. Écrire des données dans l'espace de travail in-memory est souvent significativement plus rapide que d'écrire dans d'autres formats tels qu'un shapefile ou une classe d'entités géodatabase. Cependant, les données écrites dans l'espace de travail in-memory sont temporaires et seront supprimées lorsque l'application sera fermée.
Pour écrire dans l'espace de travail in-memory, utilisez le chemin in_memory, comme illustré ci-dessous.<\/SPAN><\/LI>Lorsque des données sont écrites dans l'espace de travail in-memory, la mémoire physique (RAM) de l'ordinateur est utilisée.<\/SPAN><\/LI><\/UL><\/P>L'
outil Supprimer (Delete)<\/A> peut être utilisé pour supprimer des données dans l'espace de travail in-memory. Des tables ou classes d'entités individuelles peuvent être supprimées, ou tout l'espace de travail peut être supprimé pour effacer tout son contenu.<\/SPAN><\/LI>Une table, classe d'entités ou raster écrit dans l'espace de travail in-memory aura comme emplacement source GPInMemoryWorkspace.<\/SPAN><\/LI>Vous pouvez également utiliser l'espace de travail in_memory en Python,
Le manuel indique clairement que les espaces de travail in-memory sont bien cela, dans la mémoire physique de votre ordinateur, et que vous accédez à cet espace via in_memory. Il indique aussi que le chemin in_memory est supporté dans les outils et Python. De plus, il précise que les espaces de travail in-memory ont comme emplacement source GPInMemoryWorkspace. Enfin, il indique que l'outil Delete peut être utilisé pour supprimer des tables ou classes d'entités individuelles depuis l'espace de travail in_memory.
Tout ce qui est couvert dans la page ArcGIS Help 10.2 - Utilisation de l'espace de travail in-memory<\/> fait sens et s'accorde avec lui-même, jusqu'à ce que vous essayiez réellement d'appliquer cela dans ArcGIS Desktop 10.x ! Je pense que l'aide a raison lorsqu'elle affirme que les espaces de travail in-memory ont comme emplacement source GPInMemoryWorkspace et que ces emplacements sont stockés dans la RAM physique de l'ordinateur. Au-delà, je ne suis pas si sûr car nous avons vu des exemples où in_memory pouvait mener à du stockage sur disque, pas toujours en mémoire. Nous avons aussi vu un cas où l'outil Delete n'a pas réussi à supprimer une table in_memory, apparemment parce qu'il ne pouvait pas la voir pour la supprimer.
Encore plus étrange, l'outil Delete a également réussi à ne rien supprimer quand la table in_memory avait été créée sur disque au lieu d'être en mémoire.
Les exemples dans la deuxième partie montrent que Background Processing affecte le fonctionnement du chemin in_memory. Étonnamment, Background Processing n'est même pas mentionné une seule fois sur la page d'aide pour les espaces de travail in-memory. Peut-être que les effets du Background Processing sur le chemin in_memory sont documentés dans les pages d'aide dédiées au Background Processing. Une recherche sur 'background processing' dans la barre principale amène à ArcGIS Help 10.2 - Traitement au premier plan et en arrière-plan<\/> , qui semble être un bon endroit où aller ensuite. Comme pour l'aide sur les espaces de travail in-memory, cette page est trop longue et contient trop d'informations pour des captures d'écran.
Voici quelques extraits :
- Le panneau Background processing est là où vous contrôlez si un outil s'exécute au premier plan ou en arrière-plan.
Si Activer est coché, les outils s'exécutent en arrière-plan et vous pouvez continuer à travailler avec ArcMap (ou autres applications ArcGIS telles qu'ArcGlobe) pendant que l'outil s'exécute.
- Le traitement en arrière-plan peut être considéré comme une autre session ArcMap fonctionnant sur votre ordinateur mais sans fenêtre ArcMap ouverte.
Il y a beaucoup plus d'informations sur cette page que ce que je fournis ici, mais aucune ne concerne directement les espaces de travail in-memory. En fait, 'in-memory' et 'in_memory' ne sont même pas mentionnés une seule fois dans toute la documentation. L'aide ArcGIS 10.2 - Géotraitement en arrière-plan (64 bits)<\/> est similaire : aucun des termes n'est mentionné une seule fois. Étant donné que la deuxième partie montre clairement que Background processing affecte la fonctionnalité utilisant in_memory avec du code Python et des outils ArcGIS, il semble étrange qu'aucune des deux pages principales sur Background processing ne mentionne ce terme.
Si les pages principales ou introductives concernant les espaces de travail in-memory et le traitement en arrière-plan ne traitent pas ce que nous observons, peut-être que l'information est enfouie dans une page d'aide sur un sujet connexe. En regardant la page Gestion des données intermédiaires (scratch) dans modèles partagés et outils<\/> , "vous pouvez également écrire des données intermédiaires dans l'espace de travail in-memory." Cela dit, aucune référence au traitement en arrière-plan n'est faite. Un tour rapide sur la gestion des données intermédiaires<\/> est similaire : il parle d'utiliser les espaces de travail in-memory mais ne mentionne rien concernant Background Processing. Une recherche sur Background processing plutôt que sur in-memory ou in_memory donne des résultats similaires parlant soit d'un sujet soit de l'autre mais jamais ensemble. Fait intéressant, la page Directives pour arcpy.mapping (arcpy.mapping)<\/> a une déclaration :
- Pour utilisez le mot-clé CURRENT dans un outil de script, le traitement en arrière-plan doit être désactivé. Le traitement en arrière-plan exécute tous les scripts comme s'ils étaient exécutés en tant que scripts autonomes en dehors d'une application ArcGIS, et pour cette raison, CURRENT ne fonctionnera pas avec le traitement en arrière-plan activé.<\/SPAN><\/LI><\/UL>
<\/P>
Bien que cela ne mentionne pas directement les espaces de travail in-memory, cela suggère que le traitement en arrière-plan peut ou modifie la façon dont certains codes fonctionnent dans ArcGIS Desktop. Tenu, je sais, mais il n'y a vraiment pas grand-chose d'autre que je puisse trouver dans le manuel.<\/P>
<\/P>
Peut-être que la documentation est complète et qu'il y a juste un bug qui cause toutes les divergences que nous avons vues dans la deuxième partie de cette série. Malheureusement, rechercher les bugs publiés pour 'in_memory' et 'in-memory' ne donne pas grand-chose, 4 résultats, et certainement rien pour expliquer ce que nous avons vu.<\/P>
<\/P>
Allons sur les forums pour voir si quelqu'un a déjà posé cette question. Fait intéressant, quelqu'un a posé pratiquement la même question, il y a plus de 2 ans : Il semble que "in_memory" ne soit pas vraiment en mémoire<\/A>. Il y a/avait essentiellement deux réponses dans le fil du forum, et aucune d'elles ne semble provenir directement du personnel Esri.<\/P>
<\/P>
La première réponse est un peu incomplète car elle ne dit pas vraiment si l'affirmation s'applique au traitement au premier plan ou en arrière-plan, ou aux deux. Comme l'auteur original n'a pas précisé si le traitement en arrière-plan était activé ou non, je vais supposer que les paramètres par défaut sont utilisés, ce qui signifie traitement en arrière-plan. J'ai fait une vérification rapide en utilisant l'outil Mosaic to New Raster avec le traitement en arrière-plan activé et désactivé. Avec le traitement en arrière-plan désactivé, le raster in_memory consommait environ 400 Mo de RAM. Avec le traitement en arrière-plan activé, le raster in_memory consommait environ 120 Mo. Il peut y avoir une certaine cartographie mémoire lorsque le traitement en arrière-plan est activé, mais ce n'est sûrement pas tout charger en RAM et garder juste une référence sur disque.<\/P>
<\/P>
La deuxième réponse a du sens, mais elle n'est pas complètement exacte car nous pouvons trouver des outils où in_memory signifie toujours en mémoire même lorsque le traitement en arrière-plan est activé. CreateFeatureclass pourrait fonctionner comme la réponse l'indique, mais CopyFeatures certainement pas. Alors, comment savoir quels outils fonctionnent de quelle manière ?<\/P>
<\/P>
Non seulement les espaces de travail in-memory ont changé à ArcGIS 10.0, mais il semble que la documentation en ligne d'Esri n'aborde vraiment aucun des changements de comportement. Il est temps de prendre du recul et de réfléchir à ce que tout cela signifie pour les utilisateurs finaux et les développeurs qui essaient d'utiliser le logiciel.<\/P><\/BODY><\/HTML>