in_memory ワークスペースを使用する場合の注意事項

ArcGIS アプリケーションの ArcGIS ProArcMap、および ArcGIS Server には、出力フィーチャクラス、テーブル、ラスター データセットを書き込むことができる、in_memory ワークスペースというメモリベースのワークスペースがあります。in_memory ワークスペースは、ファイルまたはファイル/エンタープライズ ジオデータベースへ出力を書き込むための代替手段として使用できます。in_memory ワークスペースへ書き込むと、一般に処理速度が大幅に速くなりますが、そうならない場合もあります。in_memory ワークスペースに書き込まれたデータは一時的なものであり、アプリケーションを閉じると失われます。このため、in_memory は、モデルと Python スクリプト ツールから作成される中間データに最も適しています。

in-memory ワークスペースに書き込むには、in_memory/outputParcels など、in_memory で始まる出力データセット パスを指定します。

注意:
in_memory ワークスペースは、サブタイプ、ドメイン、リプレゼンテーション、トポロジ、ジオメトリック ネットワーク、ネットワーク データセット、フィーチャ データセットのようなジオデータベース エレメントをサポートしていません。

ArcGIS Pro での in_memory ワークスペースの使用

ArcGIS Pro は、64 ビットのマルチスレッド アプリケーションです。64 ビット ソフトウェア プログラムはすべて、32 ビット ソフトウェア アプリケーション (アプリケーションごとに 3 GB の RAM に制限されている) と比べてより多くの RAM を利用できます。[ジオプロセシング] ウィンドウまたは Python ウィンドウのいずれかから単独のジオプロセシング ツールを一度に 1 つずつ実行することでは in_memory ワークスペースを有効活用することができず、実際のところ、パフォーマンスの低下を招くことがあります。ArcGIS Pro はマルチスレッド アプリケーションであるため、複数の CPU を利用して、一度に複数のタスクを実行できます。in_memory ワークスペースに書き込むジオプロセシング操作では、他のスレッドには使用できない特定のメモリ部分にその操作の結果が保持されます。出力は、すべてのスレッドが出力に基づいて動作できるように、ディスク (フォルダーまたはジオデータベース内) に消えずに残る必要があります。単独のジオプロセシング操作の出力を in_memory に書き込んだ場合、出力は in_memory に作成されてジオデータベースにコピーされた後、アプリケーションに表示されます。前述のように、in_memory ワークスペースは、モデルとスクリプト内での中間データの作成にのみ使用する必要があります。モデルまたはスクリプト ツールは単一のスレッドで実行され、同じ in_memory ワークスペースにアクセスできます。このように、連結された一連のツールは、ディスクから読み書きする一連のツールよりも一般に処理速度が高速になります。

in_memory ワークスペースの管理

in_memory ワークスペースの使用時は、できるだけ早く中間データを削除して、システム メモリの領域を開放したい場合があります。in_memory ワークスペースにあるデータを削除するには、[削除 (Delete)] ツールを使用できます。データセットを個別に削除することも、ワークスペース全体を削除してすべてのワークスペースの内容を消去することもできます。空の in_memory ワークスペースを今後も続けて使用できるようになります。

モデルでの in_memory の使用

モデルの作成時に、ツールは入力および出力パラメーターを介して接続されます。1 つのツールの出力であるとともに、もう 1 つのツールで処理の続行のために入力として使用されるデータを一般的に中間データと呼びます。中間出力を in_memory ワークスペースに書き込むと、モデルが ArcGIS Pro で使用される場合の全体的な実行時間を短縮できます。in_memory ワークスペースを使用するモデルを構築するもう 1 つのメリットは、Web ツールとして ArcGIS Enterprise で共有すると、サーバー上での実行時に引き続き in_memory ワークスペースが使用される点です。

モデルがツールとして実行されると、パラメーターとして定義された出力が、デフォルトでマップに追加されます。これらの出力は、in_memory ワークスペースに書き込むことができますが、ツールの実行時にローカルのジオデータベース内でフィーチャクラスに変換されます。in_memory ワークスペースに出力を作成して、最終的にフィーチャクラスに変換するのではなく、モデル パラメーターを %scratchGDB% またはディスク上の別の絶対パスに書き込んで、変換が 1 回だけ行われるようにすることもできます。

注意:
in_memory に書き込むときに [マップへ追加] パラメーター オプションは使用できません。ジオプロセシング出力をマップに表示するには、ディスクまたはジオデータベースに書き込む必要があります。

Python と ArcPy での in_memory の使用

Python スクリプト ツールで in_memory ワークスペースを使用すると、モデル ツールを使用した場合と同じメリットが得られます。中間データを in_memory ワークスペースに書き込むと、ディスクに出力を書き込む場合と比べて一般に処理速度が高速になります。次に示す例では、[バッファー (Buffer)] ツールと [イレース (Erase)] ツールを対象として、中間データが in_memory ワークスペース内に作成されます。[ディゾルブ (Dissolve)] ツールからの FinalOutput により、ワークスペース設定で定義されたとおり、Habitat ジオデータベース内にフィーチャクラスが作成されます。

in_memory ワークスペースでの出力の作成

import arcpy
# Set the geoprocessing workspace
arcpy.env.workspace = r"C:\Data\Habitat.gdb"
# Buffer a Roads layer, writing output to in_memory 
arcpy.Buffer_analysis("Roads", "in_memory/Buffers", 1000)
# Erase the buffers from a Vegetation layer
arcpy.Erase_analysis("Vegetation", "in_memory/Buffers", "in_memory/Erased")
# Dissolve the in_memory output of Erase to make a final output
arcpy.Dissolve_management("in_memory/Erased", "FinalOutput")