> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# マルチスレッドのサーバーアプリケーションで ABBYY FineReader Engine を使用する

> マルチスレッドの Windows サーバーアプリケーション内で ABBYY FineReader Engine を実行します。並列リクエスト、サービス アカウント、マルチ CPU ホストに対応します。

<Note>
  このトピックは Windows 版 FRE に適用されます。
</Note>

サーバーアプリケーションで ABBYY FineReader Engine を使用する場合は、いくつか特有の注意点があります。

* 1 つのプロセス内の複数のスレッドで、複数の独立したリクエストを同時に処理する必要があります
* Engine は、高性能なマルチ CPU コンピューター上で動作するサーバーオペレーティングシステム上で実行されます
* 特別なアカウント (Network Service、Local Service、ASPNET) で使用します

ABBYY FineReader Engine 12 の開発では、上記の特性が考慮され、サーバープロセスの一部として、または個別のプロセス内で、スレッドセーフな FineReader Engine オブジェクトを取得できる機能が API に組み込まれました。FineReader Engine を複数のプロセスで使用すると、同時に動作するオブジェクトのプールを作成し、サーバーコンピューターの CPU 性能を最大限に活用できます。これは、ほとんどのサーバー利用シナリオで最適なアプローチです。

<div id="loading-the-engine-object-into-a-server-application">
  ## Engine object をサーバーアプリケーションに読み込む
</div>

サーバーアプリケーションに Engine を読み込む最適なメソッドは、COM を介してアウトプロセスサーバーとして別プロセスに読み込むことです。このメソッドでは、マルチスレッドに関する問題がすべて自動的に解消されます。ABBYY FineReader Engine オブジェクトに対するすべての操作は COM によってシリアル化されるため、複数のプロセスに複数の Engine インスタンスを作成し、サーバープロセス内からそれらを同時に使用できます。また、このメソッドは簡単に利用できます。[Engine](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface) オブジェクトは、[IEngineLoader](/ja/fine-reader/engine/api-reference/engine-loaders/iengineloader) インターフェイスを実装する [OutprocLoader](/ja/fine-reader/engine/api-reference/engine-loaders/outprocloader) オブジェクトを使用して読み込まれます。

<Accordion title="C# コード">
  ```csharp theme={null}
  IEngineLoader engineLoader = new FREngine.OutprocLoader();
  IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
  // Engine を別プロセスで取得しました
  try {
   ...
  } finally {
   engineLoader.ExplicitlyUnload(); // 不要になった時点でアンロードできます
  }
  ```
</Accordion>

ただし、このメソッドには重要な欠点が 1 つあります。特別なアカウントで使用する場合、そのようなアカウントで OutprocLoader を実行するための権限が必要になることがあります。ただし、FREngine.dll を登録する必要がある点も含め、これはサーバー製品ではそれほど大きな問題ではありません。通常、サーバーアプリケーションは少数のコンピューターに、経験豊富な管理者によってインストールされるためです。

* アカウント権限は、DCOM Config ユーティリティを使用して設定できます (コマンドラインで DCOMCNFG と入力するか、\[コントロール パネル] > \[管理ツール] > \[コンポーネント サービス] を選択します) 。コンソールツリーで \[コンポーネント サービス] > \[コンピューター] > \[マイ コンピューター] > \[DCOM Config] フォルダーを見つけ、ABBYY FineReader Engine 12.5 Loader (Local Server) を右クリックして \[Properties] をクリックします。ダイアログが開いたら、\[Security] タブをクリックします。\[Launch Permissions] で \[Customize] をクリックし、次に \[Edit] をクリックして、そのアプリケーションを起動できるアカウントを指定します。

<Note>
  64 ビット オペレーティング システムでは、登録された DCOM アプリケーションは 32 ビットの MMC コンソールで使用できます。このコンソールは次のコマンドラインを使用して起動できます。
</Note>

```
"mmc comexp.msc /32"
```

* エンドユーザーのコンピューターにアプリケーションをインストールする際に FREngine.dll を登録するには、regsvr32 ユーティリティを使用します。64 ビット オペレーティング システムを使用している場合、既定では regsvr32 の 64 ビット版が実行されます。次のコマンドラインを使用します。

```csharp theme={null}
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
```

* サーバー アプリケーションのデバッグ時と実行時の両方で、Network ライセンスを使用することをお勧めします。

さらに、[IHostProcessControl](/ja/fine-reader/engine/api-reference/engine-loaders/ihostprocesscontrol) インターフェイスを使用すると、ホスト プロセスの優先度を管理し、その稼働状態を制御できます。

ABBYY FineReader Engine を読み込む方法はほかにもあります。ただし、これらの方法には、サーバー アプリケーションでの使用を大きく制限する特性があります。

* ABBYY FineReader Engine は、現在のプロセス内で in-process server として COM を介して読み込むことができます。この方法では、マルチスレッドに関する問題も自動的に解消されます (ABBYY FineReader Engine オブジェクトに対するすべての操作は COM によって直列化されます) 。また、使用も簡単です。ただし、この方法では Engine object の複数のインスタンスを使った同時処理を構成できないため、サーバーのパフォーマンスが大きく制限されます。この方法のもう 1 つの欠点は、エンド ユーザーのコンピューターにアプリケーションをインストールする際に、FREngine.dll の登録が必要になることです。
* FREngine.dll は手動で読み込むこともできます。これはライブラリを読み込む標準的な方法です。この方法では、Engine object に対するすべての操作を、Engine object が初期化されたのと同じスレッド内で実行する必要があります。また、1 つのプロセスにつき初期化できる Engine object は 1 つだけです。そのため、サーバーのパフォーマンスが大きく制限されます。この理由から、この方法の使用は推奨しません。この方法の利点の 1 つは、エンド ユーザーのコンピューターにアプリケーションをインストールする際に、FREngine.dll の登録が不要なことです。

ABBYY FineReader Engine で使用できる 3 つの読み込み方法の詳細については、[Engine object を読み込むさまざまな方法](/ja/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/different-ways-to-load-engine) を参照してください。

<div id="samples">
  ## サンプル
</div>

[EnginesPool](/ja/fine-reader/engine/guided-tour/samples#enginespool) のコード サンプルでは、マルチスレッド アプリケーションにおけるプロセッサ プールの実装例を紹介しており、このサンプルをニーズに合わせて変更することで、独自のアプリケーション開発を開始できます。

<div id="see-also">
  ## 関連項目
</div>

[Engine Object を読み込むさまざまな方法](/ja/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/different-ways-to-load-engine)
