スレッドセーフではありませんが、他のスレッドセーフでない外部リソースは使用しないライブラリを使用しています。スレッドセーフなライブラリを使用するためのクイックフィックス
スレッドセーフ(スレッドセーフではない主な理由は、インスタンスごとに読み取り/書き込みを行う静的フィールドが多く、処理される多くのインスタンスで正常に動作することですシーケンシャルに複数のインスタンスを並列に使用すると明らかに失敗します)
私はハックを感じる迅速な修正として、このアプローチを本質的に間違っているのだろうかと思っています。
スレッドごとにアプリケーションドメインを作成し、そのドメインにスレッドデータをマーシャリングし、各ドメインでライブラリを読み込み、スレッドを持つアプリケーションドメインを実行してから、アンロードします。
これは、減速(多くのライブラリがロードされ、背中合わせの力がたくさんあります)を意味していますが、これを不可能にする明白なものがあります。
スピンのコストで暮らせるなら、アプリドメインをアップする。これが全体的に有益であるかどうかを知ることは興味深いでしょう。 – Biscuits
@Biscuits今日の各通話のコストはかなり高くなります(人間の言葉では「長い」ではありませんが、5秒から1分の間の入力に応じて低レベルの言葉ではまだまだ巨大です)。一方、ライブラリとの間でやりとりするデータの量は少ないので(数KB程度)、appdomainの作成/削除やデータのマーシャリングのコストは、ターゲットハードウェア上でそれらを順番に大量に実行する必要があります。ちょうど私が愚かな道を取っていないことを確認しようとしている私は決してその解決策を見たことがない前に –
あなたがしようとしているのはスケールアウトです。これはまれではありません。 IISは、アプリケーションプール上のワーカープロセスをバンプアップするときにこれを行います。実現する重要なことは、インプロセスでライブラリを呼び出すために追加コストがかかるIPCの形式が必要であり、できるだけ多くのライブラリを持たせて再利用することが有益であることを制限するスマートな方法が必要だということですプールで。実際には、あなたの戦略を策定するためにWebサーバから学ぶことがたくさんあります。 – Biscuits