ユーザーは、ツールができるだけ高速に実行されることを期待しているので、Web ツールを効率的にする必要があります。 ArcGIS Server は一度に複数のクライアントに対処できるため、効率の悪いサービスによってサーバーが過負荷状態になる可能性があります。 サービスの効率がよいほど、同じコンピューター リソースを使って対処できるクライアントの数が増えます。
サービスのパフォーマンスを向上させるためのヒントと手法を次に示します。 ここでは、これらの手法をパフォーマンスの向上率が高いものから順に示します。 最後に示すいくつかのヒントは実行時間をコンマ何秒か短縮できるので、一部の状況で重要になることがあります。
プロジェクト データでのレイヤーの使用
Web ツールとして共有する前にツールを実行する場合は、ディスク上のデータセットへのパスではなく、レイヤーを入力として使用してツールを実行します。 レイヤーはディスク上のデータセットを参照し、データセット プロパティをキャッシュします。 これは特に、ネットワーク データセット レイヤーおよびラスター レイヤーの場合に当てはまります。 データセットへのパスの代わりにレイヤーを使用すると、パフォーマンス上の利点がもたらされます。これは、サービスを開始すると、データセットからレイヤーが作成され、基本データセット プロパティがキャッシュされ、データセットが開いたままになるためです。 サービスを実行すると、データセット プロパティをすぐに使用できるようになり、データセットが開いて動作可能になります。
たとえば、Esri SampleServer の可視領域サービスや ArcGIS Network Analyst エクステンション では、レイヤーを使用した走行時間ポリゴンが作成されます。 データセットのサイズに応じて、サービス実行時間を 1 回あたり 1 〜 2 秒以上短縮できます。
ヒント:
Python スクリプト ツールでレイヤーを使用する方法の例をご参照ください。
ArcGIS Server のローカル データの使用
Web ツールで必要なプロジェクト データは、ArcGIS Server のローカル データでなければなりません。 ネットワーク共有 (UNC) を介して共有され、アクセスされるデータは、同じコンピューター上で使用可能な場合に比べて低速です。 パフォーマンスを示す数字はさまざまですが、LAN 経由でデータを読み書きすると、ローカル ディスクの場合に比べて 2 倍の時間がかかることがよくあります。
中間データのメモリへの書き込み
memory ワークスペースに中間 (テンポラリ) データを書き出します。 データをメモリに書き込むほうが、ディスクに書き込むよりも高速です。
注意:
また、出力をマップ イメージ レイヤーとして表示するオプションを設定しなければ、出力データをメモリに書き込むこともできます。
タスクで使用されるデータの事前処理
ほとんどの Web ツールは、Web クライアントによって送信された特定の空間検索に対する答えを提供するためのワークフローとして設計されています。 これらのワークフローは既知のデータに対する特定の操作であることが多いため、通常は、データを前処理することで、操作を最適化できます。 たとえば、属性インデックスまたは空間インデックスの追加は、属性選択操作または空間選択操作を最適化するための事前処理です。
- [最近接 (Near)] ツールまたは [近接情報テーブルの生成 (Generate Near Table)] ツールを使用して、既知の場所からの距離を事前に計算できます。 たとえば、サービスを使用すると、クライアントがロサンゼルス 川からユーザー定義の距離にある空き地を選択できるとします。 [空間検索 (Select Layer By Location)] ツールを使用してこの選択を実行することもできますが、それよりも、ロサンゼルス リバーからのすべての土地区画の距離を ([最近接 (Near)] ツールを使用して) 事前に計算し、その計算済みの距離を土地区画の属性として保存した方が、非常に高速です。 [属性インデックスの追加 (Add Attribute Index)] ツールを使用して、この属性にインデックスを追加できます。 これにより、クライアントが検索する際に、効率の低い空間検索ではなく、距離属性に対する属性選択をタスクで実行できます。
属性インデックスの追加
ツールが属性検索でデータを選択する場合は、[属性インデックスの追加 (Add Attribute Index)] ツールを使用して、検索で使用される属性ごとに属性インデックスを作成します。 インデックスは 1 回作成するだけでよく、モデルまたはスクリプトの外で作成できます。
空間インデックスの追加
モデルまたはスクリプトでシェープファイルに対する空間検索を実行する場合は、[空間インデックスの追加 (Add Spatial Index)] ツールを使用してシェープファイルの空間インデックスを作成します。 ジオデータベース フィーチャクラスを使用する場合は、空間インデックスが自動的に作成されて管理されます。 「ジオデータベースの空間インデックス」で説明するように、空間インデックスを再計算すると、パフォーマンスが向上することがあります。
非同期モードではなく同期モードの使用
Web ツールを同期モードまたは非同期モードで実行するように設定できます。 ツールを非同期モードで実行すると、サーバーによるオーバーヘッドが発生します。つまり、非同期モードのツールが 1 秒以内に実行されることはほとんどありません。 同じタスクを同期モードで実行すると、非同期モードで実行した場合よりも実行時間が約 0.1 秒速くなります。
不要な座標変換の回避
Web ツールで座標系が異なるデータセットを使用する際には、実行時に複数の座標を 1 つの共通座標系に変換しなければならない場合があります。 データセットのサイズによっては、座標を 1 つの座標系から別の座標系に変換すると、不要なオーバーヘッドが発生する場合があります。 データセットの座標系を確認し、ツールで座標変換を実行する必要があるかどうかを把握しておきます。 ツールで使用されるすべてのデータセットを 1 つの座標系に変換することをお勧めします。
データ サイズの削減
データを処理するソフトウェアは、データセットが小さい場合に高速に動作します。 地理データのサイズを縮小できる方法を次に示します。
- [フィールドの削除 (Delete Field)] ツールを使用して、プロジェクト データの不要な属性を削除します。
- ライン フィーチャとポリゴン フィーチャには、それらの形状を定義する頂点があります。 各頂点は X、Y 座標です。 フィーチャに必要以上の頂点が含まれていると、データセットのサイズが無駄に拡大することがあります。
- データを外部ソースから取得した場合は、重複した頂点や、非常に近接しているためにフィーチャの定義に寄与しない頂点が含まれている可能性があります。
- 頂点の数は解析の縮尺と一致しません。 たとえば、大きい縮尺に適した詳細がフィーチャに含まれていても、解析や表示が小さい縮尺で行われることがあります。