サードパーティの win32 dll をすべてのビジネス ロジックのゲートウェイとして使用する Web アプリケーション (MVC) を構築する必要があります (ログオン メカニズム、関数を含み、状態を維持します)。この dll は、マルチスレッド用に設計されていません。MTA シナリオでは、dll は一定時間後につまずきます。推奨される解決策は、ASP.NET MVC を ASP クラシック モード (Asp-CompatHandler を使用する STA) で実行することです。これを試してみましたが成功しました - すべてが安定して動作します。問題は、多数の同時ユーザーが存在し、一部の関数呼び出しに数秒 (最大 10 秒!) かかることです。すべてのユーザーがお互いをブロックすると、これは恐ろしいことになります。同じアプリケーション内でブロッキング効果を最小限に抑える最善の方法は何ですか? 互いにブロックする必要があるのは 10 人のユーザーだけだとしますか?
...Web は MTA で実行されます ...Web は一度展開されるだけです ...すべてが同じプロセス内で実行されます
これを解決する良いコンセプトについて誰かアドバイスをもらえますか?
ありがとうございました!マーティン
更新 - 解決策が見つかりました: Ami Bar の「Smart Thread Pool」のおかげで、探していた動作を (簡単に) 実現できました。ワーカーの概念 (特定のユーザー数がワーカーを共有し、このワーカー内で互いにブロックする) を実装し、ワーカーごとに、1 つのスレッドの最大数と最小数を持つ独自のスレッド プール インスタンスを作成しました。これはスレッド プールのアイデアではありませんが、作業項目の処理が非常に簡単になり、他にも優れた機能がいくつかあります。現在、Web アプリケーションは MTA で実行されています。数時間にわたって安定しているかどうかを確認するために、いくつかの負荷テストを準備します。ここを参照してください: http://www.codeproject.com/Articles/7933/Smart-Thread-Pool