質問

複数が必要です STA ASP.NETアプリケーション内のスレッドを使用して、一部を使用します COM コンポーネント。

各プロセスのどこかで1つだけを読みました STA スレッドが存在する可能性があります。サンプルプロジェクトをコーディングして、多くのスレッドを作成し、アパートの状態をに設定しました STA そして彼らは一緒に働きます COM 例外なくオブジェクト。

多くの人を持つことは可能ですか? STA プロセス内のスレッド?

役に立ちましたか?

解決

プログラムが多くのSTAスレッドで機能する場合、なぜそれが機能するかどうか尋ねるのはなぜですか? :) .NETを使用すると、任意の数のSTAスレッドを使用できるため、動作する必要があります。ただし、1つのメインスレッドとメッセージループのみを備えた典型的なネイティブアプリケーションには、読んだものは当てはまるかもしれません。

他のヒント

あなたが持つことができるSTAスレッドの数に固有の制限はありませんが、おそらくあなた自身にそのような制限を課したいと思うでしょう。

ASP.NETアプリケーションが追加のSTAスレッドを作成することを許可すると、新しいユーザーリクエストが到着するにつれて追加のSTAスレッドを作成すると、最終的にスレッドの数は、コンテキストの切り替えにCPUが費やす時間が高すぎると、アプリケーションのパフォーマンスが悪化します。 。これにより、アプリケーションはサービス拒否攻撃に対してより脆弱になります。

ハードウェアまたはユーザープロファイルに基づいてSTAスレッドの数の制限を設定した場合、制限に到達したら、既存のSTAスレッドを再利用して新しいリクエストにサービスを提供するためにプーリングを実装すると、設計を検討できます。

メモリ以外に上限はありません。 32ビットプロセスは通常、スレッドのスタックが利用可能なすべてのアドレススペースを消費した場合、2000スレッドの恥ずかしがり屋のピーターズです。

ルールを念頭に置いて、あるSTAで作成されたオブジェクトを別のSTAからマーシャリングなしで呼び出すことはできません。必要なメッセージループを忘れないでください。STAスレッドは、マーシャリングを生かし続け、デッドロックを防ぐためにポンプで汲み上げなければなりません。明らかに、メモリ制限に近づく場所を強く避ける必要があります。

標準STAスレッドには実際の制限はありませんが、メッセージループを備えたUIには「特別な」STAスレッドは1つだけです。これはあなたが他の場所で読んだものかもしれません。ほとんどのCOMは任意のSTAスレッドでは問題ありませんが、一部のCOMには、UIスレッドまたはメッセージポンピングを指す必要があるメッセージループ(タイマーチックなど)が必要になる場合があります。

この場合、STAメッセージループは必要ですか?

http://blogs.msdn.com/b/cbrumme/archive/2004/02/02/66219.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top