1

画像処理ワークフロー製品があります。通常、10,000 から 100,000 の画像をジョブで処理して実行できます。複数のジョブが保留中の場合があります。

現在、すべての画像処理は、.NET と互換性のあるマネージド C++ ライブラリである自社開発のイメージング ライブラリで実行されます。ユーザーのアプリケーション空間で実行されます。つまり、「PeteSmith」としてログオンすると、画像は Pete Smiths のアカウントで実行されるということです。

現在、この画像処理のインスタンスは一度に 1 つだけ許可されています。お客様から、複数のインスタンスを同時に実行できる新しいバージョンを求められているため、これをどのように行うかという問題は、現在調査中です。

「ユーザー アカウント」から処理を取得し、「システム アカウント」を使用してバックグラウンドで処理を行うというアイデアは魅力的です。Windows サービスは、ログインやログアウトなどの OS イベントやその他のシステム リソース使用率イベント アラームによって自然に管理されるため、魅力的です。

Microsoft によって詳細に文書化された、明確に定義された少数のイベントを管理するだけでよいように思えます。それはすべて素敵で素晴らしいです。しかし、私が理解する必要があるのは、顧客の観点から、画像処理コードのサービスの移植がパフォーマンスにとって何を意味するかということです。彼らの見解では、より多くの処理と高速化が必要です。

QUESTION トレードオフについてどのように考えるべきか:

1) サービスを使用してジョブを実行するか、Pete Smith (ユーザーの) アカウントでのみ実行されるソフトウェアの N 個の異なる「インスタンス」を実行するか?

2) Pete Smith (ユーザーの) アカウントでのみ実行されるソフトウェアの N 個の異なる「インスタンス」を実行するのと比較して、N 個のサービスが N 個の異なるジョブを実行できるようにする (クロストークは不要)。

4

1 に答える 1

0

さて、画像処理には、処理のために一定量の CPU と IO リソースが必要です。その金額は、プロセスを開始する方法と場所をいじっても変わりません。

サービスの有無の違いは、必要な使用パターンによって決まります。誰かがログオンしているかどうかに関係なく、アプリケーションで画像を自動的に処理したい場合は、サービスとして実行する必要がありますが、「画像を選択して処理を開始し、結果を待つ」スタイルの場合は、サービスとして実行する必要があります。クライアントアプリ。

顧客が複数のインスタンスを実行したい理由は完全には明らかではありません。1 つのインスタンスに負荷の高い処理を実行させ、もう 1 つのインスタンスの処理を構成したいからですか? それとも、処理が重いために複数のインスタンスを実行し、複数を並行して実行したいのでしょうか?

どちらの場合も、アプリケーションのバックグラウンド スレッドで計算を実行することを検討します。スレッドを使用できない場合 (ライブラリ内のグローバル共有状態が原因である可能性があります)、2 番目に良い方法は、新しいプロセスで各処理を開始し、メイン プロセスで結果を待つことです。

于 2013-06-06T05:16:08.247 に答える